【发布时间】:2018-02-13 01:09:12
【问题描述】:
我正在使用启用了严格的 null 检查的 Typescript。当我尝试编译以下代码时,我收到错误“type 'null' cannot be used as an index type。”
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。有没有办法在 Typescript 中实现这一点,或者 Typescript 不够聪明,无法做到这一点?
【问题讨论】:
-
我有点惊讶您可以在 javascript 中设置一个“空”索引!我检查并成功了。我敢打赌它会给我带来某种错误。也许打字稿是逻辑,只是不允许这样做
-
我认为这可能是一个错误。最初他们将索引参数限制为字符串,我猜当他们添加严格的空检查时并没有更改验证。
标签: typescript