我有一个方法,它启动一个modalWindow,它接受一个元素作为输入(使用$ event.target)或一个数字。我正在尝试检查输入的类型,但检查始终将元素视为数字,即使它不是。无论元素是否为数字,都会输出console.log,而其他内容永远不会运行。
launchModal(element: number | any) {
if (<number>element) {
console.log('ele as num', element);
} else {
const elementId = (event.target as Element).id;
const elementIdArray = String(elementId).split('-');
this.currentRow = parseInt(elementIdArray[2], 10);
}
this.loadEquipmentFullRowDataRequest(this.currentRow);
}
上关注高级类型的文档
答案 0 :(得分:3)
在typescript中,类型系统只是编译时间,在运行时,代码被转换为JavaScript,并且所有类型信息都将丢失。
当你说if (<number>element)
演员实际上没有做任何事情时,它只允许你编写代表element
作为数字的代码(这里你不做任何事情)到element
所以它没有意义。)
为了检查您获得的值是否真的是一个数字,您必须使用JavaScript方法:
if(typeof(element) === 'number')
答案 1 :(得分:1)
if(<number>element)
没有输入检查元素是否为数字,一旦编译,它只会检查element
是不是null
还是undefined
。
尝试以下方法:
const launchModal = (elem: number | HTMLElement) => {
if (!elem) {
return;
}
let row = elem as number;
if (elem instanceof HTMLElement) {
row = parseInt(elem.id.split('-')[2], 10);
}
// load row data
}
e.g。 :
launchModal(10);
launchModal(document.getElementById('...'));