您可以在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
类型?
或者这只是我需要学习的内容并且始终将类型放在所有私有构造函数成员上?
答案 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