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

属性 firstChildChildNode 类型,谁能帮我理解为什么这里不需要强制转换为 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.

类型