我试图静态地键入React组件的道具.在包含 definitions for React之后,我定义了一个名为component的React.createClass的类型变体. interface ComponentP { (props: P, ...children: any[]): React.ReactComponentP, any}funct
interface Component<P> { (props: P, ...children: any[]): React.ReactComponent<P, any> } function component<P, S>(spec: React.ReactComponentSpec<P, S>): Component<P> { return React.createClass(spec); }
当我使用注释定义带有文本字符串prop的注释时,
var Label: Component<{text: string}> = component({ render: function() { return React.DOM.div(null, this.props.text); } }); var App = React.createClass({ render: function() { return React.DOM.div(null, Label({text: "Hello"})); } });
编译器检查Label是否使用text属性调用,并且它是一个字符串.
下一步是让编译器检查this.props.text在Label方法中使用.怎么做?
我使用 react-typescript桥,它定义了一个可以从TypeScript使用的基类:class HelloMessage extends ReactTypescript.ReactComponentBase<{ name: string; }, {}> { render() { return React.DOM.div(null, 'Hello ' + this.props.name); } }
由于基类是通用的,因此this.props正确输入为{name:string;在上面的例子中.