打字稿不捕捉类型不匹配(反应TSX)

时间:2017-10-10 20:40:05

标签: reactjs typescript react-tsx

TypeScript&在这里反应新手。为什么TypeScript不会因constructor(foo: string)输入类型不匹配{foo: string}而对我大喊大叫? (注意:其中一个是字符串,另一个是对象。)

TypeScript很乐意编译它,当然结果代码会爆炸。我试图打开tsconfig.json提供的所有选项。我使用的是typescript 2.5.3。

有没有办法,比如打字稿配置,代码更改或其他任何方法来强化代码以避免这种情况?任何想法都赞赏,我的目标是编写稳定的代码。

导入*作为来自'的反应&#39 ;;     从*' react-dom';

导入*作为ReactDOM
class App extends React.Component<{ foo: string }, { foo: string }> {
    // expects string
    constructor(foo: string) {
        super();
        this.state = {
            foo: foo
        }
    }
    render() {
        return <div>{this.state.foo}</div>
    }
}

// Passes object { foo: string }
ReactDOM.render(<App foo="foo" />, document.getElementById('root'))

编辑:简化问题

2 个答案:

答案 0 :(得分:1)

如果您记得将props传递给super(),您将收到正在寻找的编译器投诉。这只是扩展React.Componentshould always be done.

的一部分

enter image description here

答案 1 :(得分:0)

您的关注:

// WRONG, to work, it should be:
//   constructor(props Props) {
constructor(foo: string, bar: string) {
  super();
}

无效,因为您始终可以继承一个类并提供自己的构造函数:

class A {
  constructor(a: number) { }
}

class B extends A {
  // ALLOWED
  constructor(b: string) {
    super(123)
  }
}