如何在TypeScript中使用document.getElementById()方法?

Mad*_*dhu 1 javascript dom angularjs typescript

我正在尝试重置HTML表单,以便使用清除输入字段中的所有值。

document.getElementById('myForm').reset(); 
Run Code Online (Sandbox Code Playgroud)

但是我可以在打字稿中使用它,这给了我一个错误,说 document.getElementById('myForm') may be null

我该如何解决这个问题?

Tit*_*mir 5

如果您使用strictNullChecks选项(或strict包含strictNullChecks),Typescript将强制您检查该值是否不为null 。您可以执行测试,也可以使用非null断言(!)。另外,您将需要使用类型断言来断言html元素是一个HTMLFormElementas,因为默认情况下它只是一个HtmlElement并且reset仅存在HTMLFormElement

只是一个断言断言:

(document.getElementById('myForm') as HTMLFormElement).reset();
Run Code Online (Sandbox Code Playgroud)

带有支票的断言(推荐):

let form = document.getElementById('myForm')
if(form) (form as HTMLFormElement).reset(); 
Run Code Online (Sandbox Code Playgroud)

不是null断言(如果您只想访问HtmlElement成员):

document.getElementById('myForm')!.click()
Run Code Online (Sandbox Code Playgroud)

  • @Takatalvi tslint 规则只是一个 lint 规则。人们可以选择加入或不加入。有很多代码库没有选择禁止此运算符,TS 编译器团队就是其中之一。还有一个 TS lint 规则强制您指定所有类型,我个人认为这是一个可怕的想法。盲目地选择每一条规则并不是一个好主意。 (3认同)
  • @Takatalvi 为什么他们被禁止?这对我来说是新闻,您能提供一些相关文档吗?也许你有一个 lint 规则禁止它们,但它们仍然是语言完全支持的一部分 (2认同)