我想用TypeScript创建一个assert函数,它会告诉我一个元素是否是一个HTMLElement的实例。
我试着这样构建它:
function assertIntanceOf(
element: unknown,
prototype: ??? // which type should I place here?
): boolean {
return element instanceof prototype;
}它必须像这样工作:
const elem = document.querySelector('.someClass'); // returns an elem
assertInstanceOf(elem, HTMLElement); // returns true
const elem2 = document.querySelector('.someClassWhichNotExists'); // returns null cause elem with class .someClassWhichNotExists doesn't exist
assertInstanceOf(elem, HTMLElement); // returns false
const someVar = 123; // simply a number
assertInstanceOf(someVar, HTMLElement); //returns false
const someObj = { //just an object
a: 'abc'
}
assertInstanceOf(someVar, HTMLElement); //returns false我应该为prototype参数放置哪种类型?
发布于 2021-02-09 20:24:32
我会使用每个the FAQ的new()“构造签名”来创建这个generic,并返回一个type predicate,这样使用它实际上会缩小第一个参数的类型:
function assertInstanceOf<T>(
element: unknown,
prototype: { new(): T },
): element is T {
// ...
}也就是说,TypeScript已经知道instanceof type guards了,所以您不一定需要将它放在函数中。
https://stackoverflow.com/questions/66118804
复制相似问题