1
有人能告訴我如何archieve的情況,在那裏同樣TS - 如何恢復老--noImplicitAny行爲
let x;
代碼將拋出一個異常,並不會散發呢?我真的更喜歡2.1之前的TS版本的行爲。也許TSlint可以解決我的問題?
有人能告訴我如何archieve的情況,在那裏同樣TS - 如何恢復老--noImplicitAny行爲
let x;
代碼將拋出一個異常,並不會散發呢?我真的更喜歡2.1之前的TS版本的行爲。也許TSlint可以解決我的問題?
不同之處在於,自從2.1版分配到x
以後,它將推斷出實際類型,而不僅僅是使用any
。在將號碼分配給x
之前,它可能看起來有any
的類型,但實際上嘗試使用它,您會發現它的類型undefined
開頭。
它不會顯示在您的單行示例中,但在分配給x
之前,您只能將其用作undefined
,並且在分配給它之後,類型會相應地擴大或更改。
考慮以下代碼:
function foo(z: boolean) {
let x;
if (x) { // Editor sees the type here as `undefined`
x.foo(); // Error here, the type of `x` is now `never`
}
x = 3; // `x` now has type `number`
if (z) {
x = 'foo'; // `x` now has type `string`
}
let y = x; // Both `x` and `y` now have type `string|number`
console.log(y.toFixed()); // Error, `toFixed` does not exist on `string|number`
}
更改定義let x:any;
這個代碼將編譯毫無怨言,因爲這裏的x
類型真的是any
。
function foo(z: boolean) {
let x: any;
x = 3;
if (z) {
x = 'foo';
}
let y = x;
console.log(y.toFixed());
}
類型的y
是明確any
,因爲它是從x
類型推斷。
所以回到你的一個班輪:
let x;
這一點,因爲推斷出的類型是undefined
不是隱含any
。
並回答這個問題,不,你不能關閉類型推斷。
謝謝。特別是你的最後一句話幫助我很多:)。但我必須要有點固執。有沒有辦法通過使用TSLint或類似的東西來轉向類型推斷?提前致謝 :) – Crova