这是一个类:
export class Survey {
isCompleted: boolean;
response: {
'devices': string[];
'languages': string[];
'frameworks': string[];
'backend': string[];
};
}
我得到了“元素隐式具有“any”类型,因为类型“...”没有索引签名“尝试以下操作时出错:
return Object.keys(user1.response).map(key => {
return percentageMatch(user1.response[key], user2.response[key]) * categoryScores[key];
})
user1
and user2
是以下实例Survey
class.
我知道如何使用简单的对象文字设置索引签名,但是如何使用response
对象,它本身就是一个属性Survey
class.
这需要添加索引类型[key: string]: string[]
to the response
type:
export class Survey {
isCompleted: boolean;
response: {
[key: string]: string[],
devices: string[],
languages: string[],
frameworks: string[],
backend: string[],
};
}
您可以在TypeScript Playground 演示 https://www.typescriptlang.org/play/#src=export%20class%20Survey%20%7B%0D%0A%20%20%20%20isCompleted%3A%20boolean%3B%0D%0A%20%20%20%20response%3A%20%7B%0D%0A%20%20%20%20%20%20%20%20%5Bkey%3A%20string%5D%3A%20string%5B%5D%2C%0D%0A%20%20%20%20%20%20%20%20devices%3A%20string%5B%5D%2C%0D%0A%20%20%20%20%20%20%20%20languages%3A%20string%5B%5D%2C%0D%0A%20%20%20%20%20%20%20%20frameworks%3A%20string%5B%5D%2C%0D%0A%20%20%20%20%20%20%20%20backend%3A%20string%5B%5D%2C%0D%0A%20%20%20%20%7D%3B%0D%0A%7D%0D%0A%0D%0Adeclare%20var%20user%3A%20Survey%0D%0A%0D%0AObject.keys(user.response).map(key%20%3D%3E%20%7B%0D%0A%20%20%20%20return%20(user.response%5Bkey%5D)%20%2F%2F%20no%20error!%0D%0A%7D)%0D%0A我创造的。
您还可以考虑减少此处的重复并将已知键提取为字符串文字类型:
type ResponseKeys = 'devices' | 'languages' | 'frameworks' | 'backend';
export class Survey {
isCompleted: boolean;
response: {
[key in ResponseKeys]: string[]
};
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)