TypeScript使用计算属性遇类型错误:无string索引签名问题求助
解决TypeScript计算属性索引类型错误
错误原因
你遇到的错误是因为checkParameter被定义为string | number类型,TypeScript无法确认它是User1类型的有效键,而User1没有声明接受任意string类型的索引签名,所以抛出类型错误。
解决方法
1. 限定索引变量为目标类型的键集合
将checkParameter的类型改为keyof User1,让TypeScript明确它只能是User1的合法键:
type User1 = { name: string; age: number; address: string; }; const user1: User1 = { name: "user1", age: 23, address: "address", }; // 限定类型为User1的键集合 let checkParameter: keyof User1 = "name"; console.log(user1[checkParameter]); checkParameter = "age"; console.log(user1[checkParameter]); checkParameter = "address"; console.log(user1[checkParameter]);
2. 为目标类型添加索引签名
如果checkParameter的值是运行时随机生成的任意string/number,可以给User1添加索引签名,允许任意字符串键:
type User1 = { name: string; age: number; address: string; // 索引签名:任意string键对应的值类型为string|number [key: string]: string | number; }; const user1: User1 = { name: "user1", age: 23, address: "address", }; let checkParameter: string | number = "name"; console.log(user1[checkParameter]); checkParameter = "age"; console.log(user1[checkParameter]); checkParameter = "address"; console.log(user1[checkParameter]);
3. 使用类型断言(谨慎使用)
如果能确保运行时checkParameter一定是User1的有效键,可以用类型断言跳过类型检查:
console.log(user1[checkParameter as keyof User1]);
内容的提问来源于stack exchange,提问作者Arun Muralidharan
相关产品推荐
相关产品推荐

