我将javascript库转换为typescript。我遇到了一个问题,其中一个变量可以是布尔值或数组。
由于它是由外部JSON数据提供的,因此无法更改 - 并且由于用户希望数据结构保持不变,因此我无法将其拆分为两个变量。
我的问题是,即使我可以定义一个联合类型,一旦这是一个数组我稍后访问的方法在布尔值上存在 not 。
所以打字稿抱怨error TS2339: Property 'push' does not exist on type 'boolean | string[]'.
var children: boolean | Array<string>;
children = [];
children.push('test');
这是一个非常简单的代码示例,可以生成我得到的结果。我该如何解决这个问题?
答案 0 :(得分:0)
这是一个非常简单的代码示例,可以生成我得到的结果。我该如何解决这个问题
TypeScript了解JavaScript :)
以下代码在TypeScript latest中运行 fine :
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
答案 1 :(得分:0)
您可以使用type guards:
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>) { ... }