打字稿:具有属性/数组作为类的数组

tru*_*ru7 4 arrays class typescript

我有这个 javascript 代码

class Customer{
    ...
}

let customers:Customer[]=[];
customers.lastDateRetrieved=new Date;
Run Code Online (Sandbox Code Playgroud)

不知何故,客户既是一个类(它有属性)又是一个数组。你会如何在打字稿中声明这个结构?我找不到从数组派生的方法(如果有道理的话)

Tit*_*mir 6

您可以使用交集类型:

let customers:Customer[] & { lastDateRetrieved?: Date} =[];
customers.lastDateRetrieved=new Date ();
Run Code Online (Sandbox Code Playgroud)

或者您可以为此用例创建一个通用类型:

type ArrayWithProps<T> = T[] & { lastDateRetrieved?: Date}
let customers:ArrayWithProps<Customer> =[];
customers.lastDateRetrieved=new Date ();
Run Code Online (Sandbox Code Playgroud)

您还可以创建一个从数组派生的类,但是您需要使用类的构造函数来初始化数组,并且不能使用[]

class ArrayWithProps<T> extends Array<T> {
    lastDateRetrieved: Date;
    constructor (... items : T[]){
        super(...items);
    }
}

var f = new ArrayWithProps();
f.push(new Customer());
f.lastDateRetrieved = new Date();
Run Code Online (Sandbox Code Playgroud)