如何正确注释接受amount
或字符串作为html标记的组件道具?
例如,我有一个可以使用自定义组件的组件(包括Component
,div
等html标记。它是这样写的:
p
如果我将另一个组件作为interface MyComponentProps<T> {
comp: React.ComponentType<T>
}
function MyComponent<T>({ comp: Component }: MyComponentProps<T>) {
return <Component />
}
道具传递给comp
,那么Typescript并不会抱怨:
MyComponent
但是,当我通过这样的标准html标签时:
function Wrapper() {
return <div />
}
function render() {
return <MyComponent comp={Wrapper} />
}
打字稿编译器投诉:
function render() {
return <MyComponent comp="div"/>
}
那么,如何在不使用Type '{ comp: "div"; }' is not assignable to type 'IntrinsicAttributes & MyComponentProps<{}>'.
Type '{ comp: "div"; }' is not assignable to type 'MyComponentProps<{}>'.
Types of property 'comp' are incompatible.
Type '"div"' is not assignable to type 'ComponentType<{}>'.
类型的情况下对MyComponent
之类的组件进行注释?
答案 0 :(得分:1)
正如Dragomir所提到的 - 联盟类型是要走的路。下面的代码编译得很好。
interface MyComponentProps<T>
{
comp: React.ComponentType<T> | string;
}
function MyComponent<T>({ comp: Component }: MyComponentProps<T>)
{
return <Component />;
}
function render()
{
return <MyComponent comp={Wrapper}/>;
}
function render2()
{
return <MyComponent comp="div"/>;
}