首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TypeScript assert函数

TypeScript assert函数
EN

Stack Overflow用户
提问于 2021-02-09 20:15:20
回答 1查看 127关注 0票数 2

我想用TypeScript创建一个assert函数,它会告诉我一个元素是否是一个HTMLElement的实例。

我试着这样构建它:

代码语言:javascript
复制
function assertIntanceOf(
  element: unknown,
  prototype: ??? // which type should I place here?
): boolean {
  return element instanceof prototype;
}

它必须像这样工作:

代码语言:javascript
复制
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参数放置哪种类型?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-02-09 20:24:32

我会使用每个the FAQnew()“构造签名”来创建这个generic,并返回一个type predicate,这样使用它实际上会缩小第一个参数的类型:

代码语言:javascript
复制
function assertInstanceOf<T>(
  element: unknown,
  prototype: { new(): T },
): element is T {
  // ...
}

Playground

也就是说,TypeScript已经知道instanceof type guards了,所以您不一定需要将它放在函数中。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66118804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档