为具有属性的数组创建接口

时间:2019-07-09 20:34:21

标签: typescript

是否可以创建一个反映以下类型的接口:

const foo = Object.assign([1,2,3], {offset: 4});

我正在考虑:

interface Bar {
    [key: number]: number;
    offset: number;
}

但是访问数组原型(map / reduce / etc)时我仍然会出错。

1 个答案:

答案 0 :(得分:4)

似乎您可以将您的界面Bar扩展为Array类:

const foo = Object.assign([1,2,3], {offset: 4});

interface Bar extends Array<Number> {
    offset: number;
}

function test(a: Bar) {
    console.log(a[0]);
    console.log(a.length);
    console.log(a.concat);
}

test(foo);

您可以阅读有关Interfaces Extending Classes

的更多信息

更新: 实际上,您可以使用交集创建单独的类型,而不用创建单独的界面:

const foo = Object.assign([1,2,3], {offset: 4});

type Bar = number[] & {offset: number};

function test(a: Bar) {
    console.log(a[0]);
    console.log(a.length);
    console.log(a.concat);
}

test(foo);