话不多说,代码如下
type VueMessageType = string | number | boolean | null | undefined | VueMessageObject;interface VueMessageObject { [key: string]: VueMessageType;}interface VueMessageArray extends Array<VueMessageType> {}interface LocaleMessages<Message = VueMessageType> { [key: string]: Message;}const test = (message: LocalVueMessage) => { console.log(message);}type LocalVueMessage = LocaleMessages<VueMessageType>interface LocaleMessage { [property: string]: string | LocaleMessage,}interface Message1 { 'zh-cn'?: LocaleMessage | undefined, 'zh-hk'?: LocaleMessage | undefined, 'en-us'?: LocaleMessage | undefined, ja?: LocaleMessage | undefined,}const message: Message1 = { 'zh-cn': { 'test': '测试', }, 'en-us': { 'test': 'test', },};// 报错// 类型“Message1”的参数不能赋给类型“LocalVueMessage”的参数。// 类型“Message1”中缺少类型“string”的索引签名。test(message);enum LangString { 'zh-cn' = 'zh-cn', 'zh-hk' = 'zh-hk', 'en-us' = 'en-us', ja = 'ja',}type Message2 = Partial<Record<LangString, LocaleMessage>>;// 提示Message2的类型为// type Message2 = {// "zh-cn"?: LocaleMessage | undefined;// "zh-hk"?: LocaleMessage | undefined;// "en-us"?: LocaleMessage | undefined;// ja?: LocaleMessage | undefined;// }const message2: Message2 = { 'zh-cn': { 'test': '测试', }, 'en-us': { 'test': 'test', },};test(message2);
话说有谁能解惑吗,这不是跟新手入门添加了恐惧心理吗