我想知道打字数组的预期类型:
let A1:string[] = [],
A2:Date[] = [],
expectedType = (arr:any[]) => {
console.log("Expecting: " + /*some magic*/);
};
expectedType(A1); // prints string
expectedType(A2); // prints Date
UPD: 正如在答案中所述,目前在TS中不可能知道Array memebers decalder类型,但是你可以做类似的事情:
class StrictArray extends Array {
private _expectedType: {new(): T}; // constructor type definition
get expectedType():{new(): T} {return this._expectedType;};
constructor(ctype: {new(): T}, args?:any) {
super.constructor(args);
}
//...
push(t:any) {
if (!(t.constructor !== this._expectedType))
throw "Not valid type";
return super.push(t);
}
}
现在我们的对象行为像普通数组一样,但我们将能够检索和控制其成员类型。
所以我们的例子是:
let A1:StrictArray = new StrictArray(string),
A2:StrictArray = new StrictArray(Date);
/*magic = */
A1.expectedType.name; // prints string
A2.expectedType.name; // prints Date
不确定这是如何有用或有害的,请发表评论。
答案 0 :(得分:0)
是否可以在typescript中知道数组的预期成员类型?
没有。在编译到JS之前删除类型信息,这样您就可以获得JS所拥有的内容。你可以做JS风格的内省,例如typeof arr[0] === 'string'
但JavaScript非常有限。