gpt4 book ai didi

typescript "not a subtype of the indexer",这是什么意思?

转载 作者:搜寻专家 更新时间:2023-10-30 21:41:22 27 4
gpt4 key购买 nike

我正在通过阅读来学习 Typescript this official document关于索引器类型。

我无法理解这段代码:

interface NumberDictionary {
[index: string]: number;
length: number; // ok, length is a number
name: string; // error, the type of 'name' is not a subtype of the indexer
}

首先,为什么要把'length'放在索引类型里面???

let myDict : NumberDictionary;
myDict[10] = 23;

NumberDictionary 是一种索引类型。为什么 NumberDictionary 定义中有一个长度?索引类型应该是a[10],为什么会有长度? javascript中的数组对象有长度,但索引类型是数组吗?如果是这样,为什么上面的例子定义了一个长度?有必要吗?对不起我的咆哮。你可以看到我很困惑。

其次,

name: string;// error, the type of 'name' is not a subtype of the indexer

我不明白这一行的评论。为什么名称必须是索引器的子类型?索引器就像a[10] = "Tom",那么索引器的子类型是什么?

最佳答案

I don't understand the comment on this line. Why name must be subtype of the indexer?

因为对于任何 string 访问,TypeScript 将假设类型为 number(基于 [index: string]: number;)。因此,如果 name: string; 被允许,则以下将假设 number 但实际上您可能认为 string:

let x: NamedDictionary = Object.create(null);
let n = "name";
let y = x[n]; // TypeScript assumes `number`
let z = x["name"]; // Would you want `string`?

查看yz之间的不一致^

关于 typescript "not a subtype of the indexer",这是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39599602/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com