typescript接口任意属性的类型限制问题

题目描述

最近在学习typescript,看的是这里的内容:https://ts.xcatliu.com/
照着上面的代码自己都实践了一遍,看到接口那个章节的任意属性部门有了疑惑,具体内容:https://ts.xcatliu.com/basics/type-of-object-interfaces#ren-yi-shu-xing

使用 [propName: string] 定义了任意属性取 string 类型的值。

给的示例代码是:

interface Person {
    name: string;
    age?: number;
    [propName: string]: any;
}

let tom: Person = {
    name: 'Tom',
    gender: 'male'
};

本地我改成:

interface Human {
  name: string;
  [properName:string]: any;
}

let man: Human = {
  name: "JayChou"
};

然后突发奇想把
[properName: string] 改成了 [properName:number]
结果发现编译没报错,通过了,然后改成 [properName:any]发现报错信息:

索引签名参数类型必须为 "string" 或 "number"。ts(1023)

所以,接口属性只有[properName: string][properName: number] 这个时候感觉好像我看懂了,但是如下情况:

interface Human {
  name: string;
  [properName: string]: any;
}

let man: Human = {
  name: "JayChou",
  1: 1
};

编译没报错,和预想的不一样,原本以为"1:1"会报错。为什么不报错。

阅读 9.1k
3 个回答

索引签名参数类型必须为 "string" 或 "number"。 嗯..... 很好的说明了

js 对象的数字索引,最终会转成字符串来取值的。

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