1

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

TypeScript 会很高兴地编译它,当然生成的代码会爆炸。我试图打开 tsconfig.json 必须提供的所有选项。我正在使用打字稿 2.5.3。

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

从'react'导入*作为React;从 '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'))

编辑:简化问题

4

2 回答 2

1

props如果你记得传递to ,你会得到你正在寻找的编译器投诉super()。这只是扩展的一部分React.Component应该始终这样做。

在此处输入图像描述

于 2017-10-15T03:32:29.017 回答
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)
  }
}
于 2017-10-10T23:29:04.880 回答