【问题标题】:How to force key types in TypeScript interface?如何在 TypeScript 界面中强制键类型?
【发布时间】:2016-05-06 18:06:10
【问题描述】:

我想创建一个强制使用字符串作为键的对象接口,但是 TypeScript 编译器会传递代码,即使它有一个数字类型作为键。为什么?

例如,

interface PriceI {
    [key:string]:number;
}

var coursePrice: PriceI = {};
coursePrice["Orange"] = 100;
coursePrice["Apple"] = 200;
coursePrice[3]=200;    // It should be compile error, but it pass
coursePrice[true]=300; // It's compile error

【问题讨论】:

  • typescript 中的静态类型是 javascript 的高度动态特性和大多数强类型语言中严格的类型强制之间的折衷。我自己更喜欢更严格的 TS,但是设计者害怕吓跑来自 JS 的人。

标签: javascript typescript


【解决方案1】:

the handbook:

支持的索引签名有两种类型:字符串和数字。可以同时支持这两种类型的索引器,但从数字索引器返回的类型必须是从字符串索引器返回的类型的子类型。这是因为当使用number 进行索引时,JavaScript 实际上会在索引到对象之前将其转换为string。这意味着使用100number)进行索引与使用"100"string)进行索引是一回事,因此两者需要保持一致。

在您的示例中,TypeScript 认为 coursePrice[3] = 200; 等同于 coursePrice["3"] = 200;

【讨论】:

    猜你喜欢
    • 2018-04-10
    • 2020-05-12
    • 2022-12-06
    • 2019-06-15
    • 2021-09-05
    • 2010-11-11
    • 2021-11-25
    • 2016-01-13
    • 2021-10-14
    相关资源
    最近更新 更多