具有字符串属性的数组的类型或接口

时间:2018-03-22 19:41:08

标签: typescript

TypeScript中是否有一种方法可以为数组定义类型或接口以接受随机字符串属性?例如,在JavaScript中我们可以执行以下操作:

const list = [ 1, 2, 3, 4, 5 ];
list.foo = 'bar';
console.log(a); // [ 1, 2, 3, 4, 5, foo: 'bar' ]
console.log(a[1]); // 2
console.log(a.foo); // 'bar'

我想在TypeScript中定义允许这样的数组的接口或类型。我尝试过以下方法:

interface IList extends Array<number> {
    [key: string]: string;
}

但是它会生成一系列错误,现有的数组方法无法分配给字符串类型。

我可以在该界面中设置特定键(例如foo: string;,但我想知道是否有办法允许随机字符串属性?

1 个答案:

答案 0 :(得分:2)

您可以使用type关键字和交叉点来定义类型:

type IList = number[] & {
    [key: string]: string;
}

但为该类型赋值有点棘手,因为数组不能分配给它(因为数组缺少字符串索引签名)。要解决这个问题,您在分配数组时必须手动将数组转换为该类型:

const x: IList = [1, 2, 3]; // Error: Index signature missing in type number[]
const y = [1, 2, 3] as IList; // Okay

然后:

y[0] // inferred as number
y["foo"] // inferred as string
y.filter(x => x % 2); // inferred as number[]