首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在TypeScript中断言HTMLElement的类型?

如何在TypeScript中断言HTMLElement的类型?
EN

Stack Overflow用户
提问于 2012-10-02 16:33:05
回答 9查看 219.6K关注 0票数 214

我正在尝试这样做:

代码语言:javascript
复制
var script:HTMLScriptElement = document.getElementsByName("script")[0];
alert(script.type);

但它给了我一个错误:

代码语言:javascript
复制
Cannot convert 'Node' to 'HTMLScriptElement': Type 'Node' is missing property 'defer' from type 'HTMLScriptElement'
(elementName: string) => NodeList

我无法访问script元素的' type‘成员,除非我将其强制转换为正确的类型,但我不知道如何做到这一点。我搜索了文档和样本,但什么也找不到。

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2012-10-02 16:47:36

TypeScript使用'<>‘包围类型转换,因此上面的代码变成:

代码语言:javascript
复制
var script = <HTMLScriptElement>document.getElementsByName("script")[0];

然而,不幸的是,您不能这样做:

代码语言:javascript
复制
var script = (<HTMLScriptElement[]>document.getElementsByName(id))[0];

你会得到错误

代码语言:javascript
复制
Cannot convert 'NodeList' to 'HTMLScriptElement[]'

但是你可以这样做:

代码语言:javascript
复制
(<HTMLScriptElement[]><any>document.getElementsByName(id))[0];
票数 277
EN

Stack Overflow用户

发布于 2014-01-16 07:48:40

从TypeScript 0.9开始,lib.d.ts文件使用专门的重载签名,为getElementsByTagName调用返回正确的类型。

这意味着您不再需要使用类型断言来更改类型:

代码语言:javascript
复制
// No type assertions needed
var script: HTMLScriptElement = document.getElementsByTagName('script')[0];
alert(script.type);
票数 36
EN

Stack Overflow用户

发布于 2017-04-21 01:18:54

不要使用类型强制转换。绝不可能。使用类型保护:

代码语言:javascript
复制
const e = document.getElementsByName("script")[0];
if (!(e instanceof HTMLScriptElement)) 
  throw new Error(`Expected e to be an HTMLScriptElement, was ${e && e.constructor && e.constructor.name || e}`);
// locally TypeScript now types e as an HTMLScriptElement, same as if you casted it.

让编译器为你做这些工作,当你的假设被证明是错误的时候,就会得到错误。

在这种情况下,它可能看起来有点杀伤力,但如果您稍后返回并更改选择器,例如添加dom中缺少的类,它将对您有很大帮助。

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

https://stackoverflow.com/questions/12686927

复制
相关文章

相似问题

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