如何在TypeScript中声明字符串索引(关联)数组?
正确实现TypeScript字符串索引关联数组的方式
你原来的写法报错是因为TypeScript的Array类型仅支持数字索引,Array<string>[string]试图获取数组的字符串索引类型,但数组本身没有这个定义,所以会报错。同时,数组和字符串索引对象是不兼容的类型,不能把[]赋值给字符串索引类型的变量。
实现字符串索引的关联数组,正确的方式是定义一个带字符串索引签名的对象类型:
基础实现
// 定义字符串索引的对象类型,键为string,值为string type Bla = { [key: string]: string }; // 初始化空对象(不能用[],数组是数字索引类型) const blubb: Bla = {}; blubb["edfefe"] = "2";
可选:允许值为undefined
如果需要允许某些键不存在(即值可以是undefined),可以调整类型:
type Bla = { [key: string]: string | undefined };
不推荐的混合方式(数组+字符串索引)
如果强行想同时拥有数组方法和字符串索引,可以用交叉类型,但这种写法存在类型冲突风险(比如数组的内置属性会和自定义字符串键冲突),不建议在生产代码中使用:
type Bla = Array<string> & { [key: string]: string }; const blubb: Bla = []; blubb["edfefe"] = "2";
简单来说,TypeScript里的“关联数组”本质就是带字符串索引的对象,和原生Array是两种不同的类型,不要混用。
内容的提问来源于stack exchange,提问作者muzzletov
相关产品推荐
相关产品推荐

