纯吐槽,TS真尼玛奇葩

126 阅读1分钟

话不多说,代码如下

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);

话说有谁能解惑吗,这不是跟新手入门添加了恐惧心理吗