typescript 接口添加多余属性后会报错?

interface Obj {
    name: string;
    num?: number;
    readonly sex?: string;
    [surName: string]: string;  //添加这行后,前面的 num 会报错
}

const func = (x: Obj):void => {
    console.log(x)
}

// 想实现下面的效果
func({name: 'june', str: 'str'})   // 这个能正常识别
func({name: 'june', boo: false})   // 这个会报错
阅读 1.8k
2 个回答

num这个键的类型不是string吗?但[surName: string]: string要求所有键为string类型的对应值类型是string,这与num: number矛盾了。

因为你写的[surName: string]: string;,是Record<string, string>的意思,限制了对象里面所有的属性都是 string: string的类型。所以前面的 number类型 ?:string类型都会报错

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题