TypeScript的构造函数参数类型推断 - 我认为这会有用吗?

时间:2016-10-11 06:08:55

标签: typescript type-inference

您可以在playground使用以下代码进行验证。

鉴于此代码:

class Alpha {

        private beta;

        constructor(b: Beta) {
                this.beta = b;
        }

        doSomething() {
                this.beta.doesNotExist();
        }

}

class Beta {

}

我有点期待编译器错误Property 'doesNotExist' does not exist on type 'Beta'.

但是,只有将类型放在beta上,例如:

,才能获得
private beta:Beta;

我认为TypeScript具有参数分配的类型推断。例如,参数b的类型为Beta。您可以验证是否将其添加到构造函数中:

const test:string = beta;

然后你得到编译器错误Type 'Beta' is not assignable to type 'string'.

所以我的问题是,为什么private beta不属于beta类型?

或者这只是我需要学习的内容并且始终将类型放在所有私有构造函数成员上?

1 个答案:

答案 0 :(得分:2)

  

我认为TypeScript具有参数分配的类型推断

不。

修复

实际上有两个:

明确注释成员

class Alpha {

        private beta: Beta; // annotate

        constructor(b: Beta) {
                this.beta = b;
        }

        doSomething() {
                this.beta.doesNotExist();
        }

}

class Beta {

}

组合参数和成员声明(更好)

class Alpha {
        constructor(private beta: Beta) { // notice `private`
        }

        doSomething() {
                this.beta.doesNotExist();
        }

}

class Beta {

}

更多

关于推理的一些注释:https://basarat.gitbooks.io/typescript/content/docs/types/type-inference.html