gpt4 book ai didi

typescript - 这应该给出编译错误吗?

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

下面的编译和运行都很好。但是在我看来,接口(interface)声明说索引应该是数字类型。但我在这里使用了一个字符串。

我没有收到编译错误的原因是什么?

interface Dictionary {
[index: number] : string;
}

var dictionary : Dictionary = {};
dictionary["First"] = "apple";

console.log(dictionary["First"]);

最佳答案

这是索引签名的一个微妙之处。使用带有索引签名的接口(interface)时,例如:

[index: number] : string

这意味着任何时候有一个索引是一个number,它必须被设置为一个string值。它不会将对象实例限制为只有 number。当有数字时,必须将其设置为string

来自规范(当前为 3.7.4 索引签名):

Numeric index signatures, specified using index type number, define type constraints for all numerically named properties in the containing type. Specifically, in a type with a numeric index signature of type T, all numerically named properties must have types that are subtypes of T.

如果您要将界面更改为:

[index: number]: number;

并添加一行:

dictionary[1] = "apple";

会出现编译错误:"Cannot convert 'string' to 'number'."

如果索引签名与对象字面量中的属性分配不匹配,则在没有上下文类型的情况下处理它(无错误地忽略),假设它与实际属性不匹配。

关于typescript - 这应该给出编译错误吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21960916/

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