Typescript 如何键入“多态”组件?
我试图键入一个React组件,它可以包装一个数字或数字[]的值,但不能同时包装这两个值。这是迄今为止我得到的声明的一个人为版本:Typescript 如何键入“多态”组件?,typescript,Typescript,我试图键入一个React组件,它可以包装一个数字或数字[]的值,但不能同时包装这两个值。这是迄今为止我得到的声明的一个人为版本: export interface Props<T> { value: T; } class SomeComponent<T extends number | number[]> extends React.Component<Props<T>, any> { getValue(): T; } 我的问题是我不知
export interface Props<T> {
value: T;
}
class SomeComponent<T extends number | number[]> extends React.Component<Props<T>, any> {
getValue(): T;
}
我的问题是我不知道。如果声明正确,则为2。我怎么能用它。我现在正在尝试/想做类似的事情,但这是一个语法错误:
const foo: number = 123;
return <SomeComponent<number> value={foo} />
如何声明和使用这样工作的组件?问题是不能在tsx标记中使用泛型。您可以使用常规TS语法实例化组件:
var cNumber = new SomeComponent<number>({
value : 0
});
var cNumberArray = new SomeComponent<number[]>({
value: [1, 2, 3]
});
另一个选项是声明修复类型参数的额外类型:
let SomeNumberComponent: new ()=> SomeComponent<number> = SomeComponent as any;
或
注:还强调了这一限制
class SomeIntComponent extends SomeComponent<number> {
}