簡體   English   中英

在打字稿中對聯合類型的變量使用非共享方法

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM