【发布时间】:2019-04-26 05:00:23
【问题描述】:
我在“File1”中有一个抽象类:
// File1.tsx
import * as React from 'react';
export interface IProps {
prop1: string;
prop2: number;
}
export abstract class Something extends React.Component<IProps> {
public typeName: string;
}
然后,在其他文件(File2)中,我定义了从抽象类Something扩展的无限类:
// File2.tsx
import { Something } from './File1';
export class Something1 extends Something {
public typeName: string = 'Type1';
public render() {
return <div>Something 1</div>
}
}
export class Something2 extends Something {
public typeName: string = 'Type2';
public render() {
return <div>Something 2</div>
}
}
现在,这是我的问题: 在第三个文件中,我导入之前定义的类(Something1 或 Something2),然后将此类传递给 2 个不同的组件:ReadProperty 和 RenderComponent。在第一个组件中,我需要访问类的属性 typeName 并做一些事情,在第二个文件中,我需要渲染该类:
// File3.tsx
import { Something } from './File1';
import { Something1, Something2 } from './File2';
interface IReadProperty {
something: Something;
};
const ReadProperty: React.SFC<IReadProperty> = ({ something }) => {
// here i can access to property typeName. No problem here.
something.typeName // Type1 | Type2 | ... Infinite
...do some stuff
}
interface IRenderComponent {
something: Something;
}
const RenderComponent: React.SFC<IRenderComponent> = ({ something }) => {
// i need do some stuff here before render "something" component
// here i get an error when i try render the component
return <something />;
}
const Main: React.SFC = () => {
return (
<div>
<ReadProperty something={Something1} />
<RenderComponent something={Something1} />
</div>
);
}
但是当我尝试在 RenderComponent 中渲染组件时,出现以下错误:TS2604: JSX element type 'something' does not have any construction or call signatures.
这里有什么问题?我将类型'something'定义为抽象类Something,因为我可以定义从Something扩展的无限类,所以我不能定义使用:something:Something1 |东西2 |东西50 ...;
这是我尝试做的一个例子:https://codesandbox.io/s/18yzvkx8jj
【问题讨论】:
-
欢迎来到 StackOverflow - 只是想在第一个问题上说得好!感谢您详细描述了问题并提供了重现问题所需的所有代码。
标签: javascript reactjs typescript types