IntrinsicAttributes 和 IntrinsicClassAttributes
在 TypeScript 中实现的接口。它们影响React和.jsx与DOM元素的交互,同时使用自定义组件。
基本原理
让我们假设你有
interface BarProps {
foo: string;
}
class Bar extends React.Component<BarProps> {
...
}
如果你尝试渲染它
render() {
return (
<form>
<Bar />
</form>
);
}
你会得到一个类似的错误;因为您违反了接口类型检查。组件应该有一个强制性的props,即BarProps
在这里作为参数传递。
为了让它工作,你需要做一些类似的事情..
render() {
return (
<form>
<Bar foo="Jack Daniel's"/>
</form>
);
}
或者您可以从组件定义本身中删除它。
class Bar extends React.Component<> {
...
}
或使foo
可选..
interface BarProps{
foo?: string;
}
想法是实现一致性。
在您的情况下,您正在传递一个未知的props,即action
可能尚未在您的组件中定义。
当你调用你的组件时<MyComponent {...props} />
- 它本质上意味着,导入所有可用的props。
当您显式调用action
prop 时,<MyComponent action={this.state.action} />
它会抛出大错误。
提到的错误是非常臭名昭著的。您可以在此React 和 TypeScript调试指南中找到更多见解,其中突出显示了这些错误并分享了可能的修复方法。
你可以阅读更多有关的实施IntrinsicAttributes
和IntrinsicClassAttributes
在这个仓库