【发布时间】:2017-02-03 15:14:42
【问题描述】:
我可以根据 TypeScript 1.8 或 2.0 中的字符串文字类型参数的值来获得变量返回类型吗?
type Fruit = "apple" | "orange"
function doSomething(foo : Fruit) : string | string[] {
if (foo == "apple") return "hello";
else return ["hello","world"];
}
var test : string[] = doSomething("orange");
错误:TS2322:类型“字符串 | string[]' 不可分配给类型 '字符串[]'。
【问题讨论】:
-
test变量类型应该是string[]|string -
@AlekseyL。我不同意。如果将
"orange"作为参数传递给doSomething总是产生string[],那么test也具有该类型是正确的。您需要使用overloading。 -
@JohnWhite
doSomething签名明确指出返回类型为string[]|string,而重载则不是这种情况,您只需根据特定输入指定返回类型 -
@AlekseyL。我想这真的是一个透视问题。但是,
"orange" => string[]是实际代表运行时行为的签名,而不是"orange" => string | string[]。 -
您可以使用条件类型,请参阅此答案:stackoverflow.com/a/55059318/2684980
标签: typescript