我有一个简单的React元件。
当我使用HTMLinputElement作为useRef钩子类型并将其赋给div时,typescript没有抛出任何错误(它应该抛出任何错误)。
import { useRef } from "react"
export default function Box(){
const ref = useRef<HTMLInputElement>(null)
return <div ref={ref}>this is a div</div>
}
这是codesandbox链接,您可以在其中看到它https://codesandbox.io/s/sleepy-galileo-27cb1y?file=/src/Box.tsx
我也尝试了我的vscode和结果是一样的。
我在codesandbox和我的vscode上试过了,结果是一样的。我预计ts在使用HTMLInputElement类型ref并将其赋给div时会抛出错误。
1条答案
按热度按时间vsnjm48y1#
因为
HTMLInputElement
是HTMLDivElement
的可赋值项。这感觉不对,但请记住,Typescript是结构化的,而不是名义上的。这意味着如果一个值具有接口的所有属性,那么它可能被视为该接口。
看起来
HTMLDivElement
具有以下类型:HTMLInputElement
具有以下类型:需要注意的是,标记名
"div"
vs"input"
不是类型的一部分,HTMLInputElement
类型拥有HTMLDivElement
类型所需的所有属性,因此Typescript允许这种赋值。同样值得注意的是,如果你这样做,它将是一个类型错误: