Skip to content

yiminghe/typed-icu-message

Repository files navigation

typed-icu-message

generate typescript type definition for icu message

NPM version NPM downloads

demo

1 2 3 4

usage

npm install typed-icu-message
import { getTsTypesFromRes } from 'typed-icu-message';

const messages = {
    zh: {
        'a': '一 {b} {c}',
        'b': 'b',
        'c': '二 {num, plural, =0 {{num2}} =1 {{num2}} other {{num2}}}',
        'd': '<s>d {d}</s>',
    },
    en: {
        'a': 'one {b} {c} {d}',
        'b': 'bb',
        'c': 'two {num, plural, =0 {{num2}} =1 {{num2}} other {{num2}}}',
        'd': '<ss>d {dd}</ss>',
    }
};

const code = getTsTypesFromRes(messages);

generated code:

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: "<s>d {d}</s>" | "<ss>d {dd}</ss>";

        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 = <T extends I18nResKeys>(
    key: T,
    ...values: I18nRes[T]['valuesType'] extends undefined ? [] : [I18nRes[T]['valuesType']]
) => I18nRes[T]['returnType'];

About

type-safety for ICU messages

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published