Javascript Typescript-没有带类型为';的参数的索引签名;字符串';
在Javascript中,事情很简单:Javascript Typescript-没有带类型为';的参数的索引签名;字符串';,javascript,reactjs,typescript,Javascript,Reactjs,Typescript,在Javascript中,事情很简单: interface Person { id: number red: number green: number blue: number buckets: Array<BucketType> // Does the index signature go here? What does it look like? // I haven't seen any "standard" way of doing this }
interface Person {
id: number
red: number
green: number
blue: number
buckets: Array<BucketType>
// Does the index signature go here? What does it look like?
// I haven't seen any "standard" way of doing this
}
interface BucketType {
color: string,
weight: number
}
const personA = {
id: 123,
red: 4,
green: 5,
blue: 6,
buckets: [
{
color: 'Blue',
weight: 4
}
]
}
const personB = {
id: 456,
red: 7,
green: 8,
blue: 9,
buckets: [
{
color: 'Red',
weight: 10
}
]
}
const people = [ personA, personB ]
for (let person of people) {
for (let bucket of person.buckets) {
console.log(bucket.weight) // 4, then 10
console.log(bucket.color) // 'Blue', then 'Red'
bucket.weight += person[bucket.color.toLowerCase()] // ERROR: NO INDEX SIGNATURE!!!! (Typescript)
console.log(bucket.weight) // In pure Javascript, this logs '10', then '17'
}
}
接口人{
身份证号码
红色:号码
绿色:数字
蓝色:号码
桶:数组
//索引签名在这里吗?它看起来像什么?
//我还没有看到任何“标准”的方法来做这件事
}
接口Buckettetype{
颜色:字符串,
重量:数字
}
const personA={
id:123,
红色:4,
绿色:5,
蓝色:6,
水桶:[
{
颜色:“蓝色”,
体重:4
}
]
}
const personB={
身份证号码:456,
红色:7,
绿色:8,
蓝色:9,
水桶:[
{
颜色:“红色”,
体重:10
}
]
}
const people=[personA,personB]
为了(让人成为人){
为了(让一桶人。桶){
console.log(bucket.weight)//4,然后是10
console.log(bucket.color)/“蓝色”,然后是“红色”
bucket.weight+=person[bucket.color.toLowerCase()]//错误:没有索引签名!!!!(Typescript)
console.log(bucket.weight)//在纯Javascript中,记录“10”,然后记录“17”
}
}
老实说,这到底是怎么回事。我如何在我的个人类型中添加“索引签名”,以便继续我的生活
很抱歉发短信发牢骚,我已经精疲力竭了,无法再继续打字了 Typescript类型检查器正在抱怨,因为它无法检查代码是否不会导致错误。Typescript类型检查器无法读取字符串“Red”和“Blue”的值,并且知道如果它们是小写的,则它们与对象上的属性匹配。这只能在运行时完成,不能在类型检查时完成 因此,您必须向编译器提示
bucket.color.toLowerCase()
的可能结果如下:
bucket.weight += person[bucket.color.toLowerCase() as 'red'|'blue'|'green'];
这回答了你的问题吗?不,因为我不知道这些答案对我的问题意味着什么。谢谢你,但是我已经看过很多次了。我想知道的是“如何”添加索引签名来修复此错误。我将用我的person界面更新帖子。当定义
personA:any={}
和personB:any={}
时,请尝试为每个person对象使用type。这里是否有一种简写或可重复使用的方法来指定可能性?如果我有一组更大的可能选项,并且需要在代码中的多个位置使用它,那么多次写出列表似乎很愚蠢。我相信你可以做type BucketColor='red'|'blue'|'green'
然后做bucket.color.toLowerCase()作为BucketColor