https://github.com/yiminghe/typed-icu-message
https://github.com/yiminghe/typed-icu-message
Last synced: 3 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/yiminghe/typed-icu-message
- Owner: yiminghe
- License: mit
- Created: 2023-12-29T10:18:53.000Z (over 1 year ago)
- Default Branch: main
- Last Pushed: 2024-03-14T07:21:05.000Z (over 1 year ago)
- Last Synced: 2024-04-15T04:24:47.104Z (about 1 year ago)
- Language: TypeScript
- Size: 297 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# typed-icu-message
generate typescript type definition for icu message
[](http://badge.fury.io/js/typed-icu-message)
[](https://npmjs.org/package/typed-icu-message)## demo



## usage
```shell
npm install typed-icu-message
``````typescript
import { getTsTypesFromRes } from 'typed-icu-message';const messages = {
zh: {
'a': '一 {b} {c}',
'b': 'b',
'c': '二 {num, plural, =0 {{num2}} =1 {{num2}} other {{num2}}}',
'd': 'd {d}',
},
en: {
'a': 'one {b} {c} {d}',
'b': 'bb',
'c': 'two {num, plural, =0 {{num2}} =1 {{num2}} other {{num2}}}',
'd': 'd {dd}',
}
};const code = getTsTypesFromRes(messages);
```generated code:
```typescript
import React from 'react';/* eslint-disable */
export interface I18nRes {"a": {
returnType: "一 {b} {c}" | "one {b} {c} {d}";valuesType: {
"b": any;
"c": any;
"d": any;};
};
"b": {
returnType: "b" | "bb";valuesType: undefined;
};
"c": {
returnType: "二 {num, plural, =0 {{num2}} =1 {{num2}} other {{num2}}}" | "two {num, plural, =0 {{num2}} =1 {{num2}} other {{num2}}}";valuesType: {
"num": number;
"num2": any;};
};
"d": {
returnType: "d {d}" | "d {dd}";valuesType: {
"d": any;
"dd": any;"s": (chunks: React.ReactNode) => React.ReactNode;
"ss": (chunks: React.ReactNode) => React.ReactNode;};
};
}export type I18nResKeys = keyof I18nRes;
export type I18nTranslate = (
key: T,
...values: I18nRes[T]['valuesType'] extends undefined ? [] : [I18nRes[T]['valuesType']]
) => I18nRes[T]['returnType'];```