0
讓我們先從一些代碼:如何判斷TypeScript對象的類型?
export function toArrayStrict(obj: Iterable<any>): any[] {
if(obj) {
if(isArray(obj)) {
return obj; // error TS2322: Type 'Iterable<any>' is not assignable to type 'any[]'.
}
if(isFunction(obj[Symbol.iterator])) {
return [...obj];
}
}
throw new Error(`Cannot convert ${getType(obj)} to array; it is not iterable.`);
}
這是拋出一個錯誤,當我嘗試編譯:
錯誤TS2322:類型「可迭代」是不能分配給類型「任何[]」 。
我完全得到。它不知道我已驗證obj
實際上是any[]
。
我的問題是,我如何告訴編譯器isArray
正在檢查類型,這實際上是安全的?
注意,我知道如果我用Array.isArray
代替,錯誤將消失。這個問題不是關於這個問題。我想知道我怎麼告訴tsc
這是什麼類型。
噢人,這是真棒!我實際上並沒有想到TS會爲此提供解決方案。剛發現我可以[壓制](https://github.com/Microsoft/TypeScript/issues/9448#issuecomment-229739856)這個錯誤,但是這樣好多了。 – mpen
使用'any'會導致您失去類型安全。只有當你沒有別的選擇時,你才應該這樣做。 –