[英]Using non-shared methods for a union-typed variable in typescript
我正在將javascript庫轉換為打字稿。 我遇到一個問題,其中一個變量可以是布爾值或數組。
這不能更改,因為它是由外部JSON數據饋送的-並且由於用戶希望數據結構保持不變,因此我無法將其拆分為兩個變量。
我的問題是,即使我可以定義聯合類型,但一旦成為數組,我以后訪問的方法就不存在於布爾值上。
因此,打字稿抱怨error TS2339: Property 'push' does not exist on type 'boolean | string[]'.
error TS2339: Property 'push' does not exist on type 'boolean | string[]'.
var children: boolean | Array<string>;
children = [];
children.push('test');
這是一個非常簡單的代碼示例,可以產生我得到的結果。 我該如何解決?
這是一個非常簡單的代碼示例,可以產生我得到的結果。 我該如何解決
TypeScript理解JavaScript :)
以下代碼在TypeScript中最新運行良好 :
var children: boolean | Array<string>;
children = [];
children.push('test');
因為它具有更具攻擊性的代碼流分析;)
TypeScript版本: https : //basarat.gitbooks.io/typescript/content/docs/getting-started.html
如果需要,可以在TypeScript的當前穩定版本中使用類型保護(我只是將其移至最新版本)。 有關類型防護的更多信息: https : //basarat.gitbooks.io/typescript/content/docs/types/typeGuard.html
您可以使用類型防護 :
if (children instanceof Array) {
children.push('test');
}
要么
if (typeof children === "boolean") {
// children is boolean
}
有時您需要做的事情比一個線性console.log
還要復雜一些,因此擁有處理不同可能類型的不同功能很方便:
var children: boolean | Array<string>;
if (children instanceof Array) {
useChildrenArray(children);
} else {
useChildrenBoolean(children);
}
function useChildrenBoolean(children: boolean) { ... }
function useChildrenArray(children: Array<string>) { ... }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.