我正在使用启用了严格空值检查的Typescript。当我尝试编译下面的代码时,我得到错误“type'null'不能用作索引类型。”类型'null'不能用作索引类型
function buildInverseMap(source: Array<string | null>) {
var inverseMap: { [key: string]: number } = {};
for (let i = 0; i < source.length; i++) {
inverseMap[source[i]] = i;
}
}
很明显,inverseMap不能有null作为关键字,因为类型约束不允许它。但是,如果我改变inverseMap的类型是:
var inverseMap: { [key: string | null]: number } = {};
我得到的错误“索引签名的参数类型必须是‘串’或‘号’。”这很奇怪,因为在JavaScript中使用null作为索引是合法的。例如,如果运行在浏览器中下面的代码:
var map = {};
map[null] = 3;
map[null];
输出为3.是否有办法做到这一点的打字稿或者是打字稿不够聪明做到这一点?
我有点惊讶,你可以在JavaScript中设置一个'空'索引!我检查,它的工作。本来打赌它会给我带来某种错误。 也许typescript是逻辑,只是不允许 – sheplu
我认为这可能是我的错误。最初他们将索引参数限制为字符串,我猜测他们添加了严格的空检查时没有改变验证。 –