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