繁体   English   中英

typescript:声明类似地图的类型 object

[英]typescript: declare type of map-like object

我正在使用 object 来存储 map,键是字符串,值具有固定类型 T。

在 object 中查找键时,类型推断为其分配类型 T。但它可能未定义。
在以下示例中,我希望 entry 的类型number|undefined 但 typescript 推断number 这似乎不正确:

const data: {[index:string]: number} = {
    "aa34da": 1,
    "basd23": 2,
    "as34sf": 5
};

const entry = data["doesn't exist"];
console.log(entry);

这是类型推断中的错误吗?

我知道 ES6 Map,它提供了一个完全符合我期望的签名的get()方法。 但是 Map 与 JSON 序列化并不能很好地配合。 我宁愿只使用对象。

正如您已经发现的那样,类型推断没有错误,因为data的类型被明确设置为“在任何字符串键处包含数字的对象”。 所以我们应该让 typescript 知道值可能是undefined的:

declare const data: { [index: string]: number|undefined };

您还可以使用Record实用程序来定义这样的类型:

declare const data: Record<string, number | undefined>;

Record<K, T>构造一个具有一组 T 类型的属性 K 的类型。

在玩了一些代码之后,我认为声明类似地图的 object 的正确方法是,其中一些键可能不指向值:

const data: {[index:string]: number|undefined} = {
    "aa34da": 1,
    "basd23": 2,
    "as34sf": 5
}

const entry = data["doesn't exist"];

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM