【发布时间】:2017-04-15 04:34:47
【问题描述】:
Typescript 非常适合推断泛型类型。比如我写如下代码:
class AwesomeClass<T> {
constructor(public val: T) {
// ...
}
public getVal(): T {
return this.val;
}
}
const inst = new AwesomeClass("Hello World");
const result = inst.getVal();
result 会自动输入到string。漂亮!我想通过 React 更进一步。
如果我制作跟随组件
interface IProps<T> {
value: T;
onClick: (result: T) => void;
}
interface IState { }
class AwesomeComponent<T> extends React.Component<IProps<T>, IState> {
// ...
}
我真的很想推断value 必须与onClick 的result 参数具有相同的类型。相反,当我用
<AwesomeComponent
value="Hello World"
onClick={(v) => { console.log(v); }} />;
我收到一个编译错误error TS2322: Type 'string' is not assignable to type 'T'。
是否可以根据 React 元素的 props 推断泛型类型?
我意识到 JSX 转换为对 React.createElement 的调用(它不像我在上面的 AwesomeClass 示例中那样直接初始化类)并且这可能会使过程复杂化 - 这是一个交易杀手吗?如果是这样,我可以使用 JSX 语法显式命名泛型类型吗?
【问题讨论】:
标签: generics reactjs typescript jsx inferred-type