TypeScript 抱怨不必要的断言
TypeScript complains about unnecessary assertion
我正在使用 TypeScript 4.6.4 并给出了以下函数:
function foo(element: HTMLInputElement): void {
const inputElement: HTMLInputElement = element.firstChild as HTMLInputElement;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[...]
}
错误说:
This assertion is unnecessary since it does not change the type of the expression.eslint@typescript-eslint/no-unnecessary-type-assertion
属性 firstChild
是 ChildNode
类型,谁能帮我理解为什么这里不需要强制转换为 HTMLInputElement
?如果我删除它,它会抱怨 ChildNode
cannnnot be assigned to HTMLInputElement
.
它是typescript-eslint that is complaining not the Typescript compiler. If you try to run your code In the typescript playground,你会看到它编译没有错误。
错误是由 typescript-eslint
引发的,因为它读取 const inputElement: HTMLInputElement
,这表明 inputElement
的类型为 HTMLInputElement
。因此,断言 as HTMLInputElement
不会改变 inputElement
的类型是正确的,它已经是 HTMLInpuElement
但是你也正确认为 const inputElement: HTMLInputElement = element.firstChild
会引发编译器错误,因为 firstChild
确实是 ChildNode
.
类型
要消除警告,您可以做的是 const inputElement = element.firstChild as HTMLInputElement
。这将正确编译并读取重复输入。 inputElement
将是 HTMLInputElement
.
类型
我正在使用 TypeScript 4.6.4 并给出了以下函数:
function foo(element: HTMLInputElement): void {
const inputElement: HTMLInputElement = element.firstChild as HTMLInputElement;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
[...]
}
错误说:
This assertion is unnecessary since it does not change the type of the expression.eslint@typescript-eslint/no-unnecessary-type-assertion
属性 firstChild
是 ChildNode
类型,谁能帮我理解为什么这里不需要强制转换为 HTMLInputElement
?如果我删除它,它会抱怨 ChildNode
cannnnot be assigned to HTMLInputElement
.
它是typescript-eslint that is complaining not the Typescript compiler. If you try to run your code In the typescript playground,你会看到它编译没有错误。
错误是由 typescript-eslint
引发的,因为它读取 const inputElement: HTMLInputElement
,这表明 inputElement
的类型为 HTMLInputElement
。因此,断言 as HTMLInputElement
不会改变 inputElement
的类型是正确的,它已经是 HTMLInpuElement
但是你也正确认为 const inputElement: HTMLInputElement = element.firstChild
会引发编译器错误,因为 firstChild
确实是 ChildNode
.
要消除警告,您可以做的是 const inputElement = element.firstChild as HTMLInputElement
。这将正确编译并读取重复输入。 inputElement
将是 HTMLInputElement
.