我使用Typescript模板创建了一个vanilla react应用程序。
我添加了这一行:
<dialog inert></dialog>
字符串
应用程序甚至不会运行,因为typescript抛出一个错误:
在src/App.tsx中出现错误:9:15 TS 2322:类型“{ children:never[]; inert:true; }"不可分配给类型”DetailedHTMLProps<DialogHTMLAttributes,HTMLDialogElement“。类型”DetailedHTMLProps<DialogHTMLAttributes,HTMLDialogElement“上不存在属性”inert“。
我想修复它,而不是忽略它,但即使忽略似乎也不起作用。
// @ts-ignore
return (<dialog inert></dialog>);
型
3条答案
按热度按时间o7jaxewo1#
该类型尚未添加到React TypeScript定义中。有一个草案PR here正在工作中,所以如果get的合并应该可以工作。
yftpprvb2#
一种简单的方法来解决React (as of writing) does not yet have type definitions for the
inert
attribute的问题,就是将其 Package 到一个对象中,然后将其解构回元素中:字符串
虽然很傻,但这应该会短路任何特定的TypeScript和ESLint投诉,并允许您使用它。请注意,如果这是元素上的 * 唯一 * 属性,* 并且 * 您的元素没有子元素,JSX本身可能仍然会向您抱怨。为什么要创建一个空的惰性元素,但
sips tea
与我无关。一个稍微更强大的解决方案将是几件事的组合。
为了让TypeScript高兴,你可以为你的项目添加(或添加到)一个
declarations.d.ts
文件,在inert
属性的临时定义中添加:型
如果您使用的是ESLint,您可以通过the
react/no-unknown-property
rule在配置文件(.eslintrc
或类似文件)中添加inert
的异常:型
在这两种解决方案中,我们被迫使用稍微奇怪的语法,即向
inert
传递一个空字符串(对于true
)或undefined
(对于false
)。与disabled
这样的属性相比,这感觉有点笨拙,它可以直接接受布尔值。不幸的是,使用布尔值的这种方式是React添加到支持的属性中的语法糖,因此,在inert
得到本机支持之前,我们无法获得它特殊好处。yvfmudvl3#
将其添加到全局类型定义中:
字符串
而不是使用它作为一个布尔,使用作为一个空字符串:
型
或者:
型