我有一个这样的函数:
function foo() {
if (Math.random() < 0.5) {
return {
a: 5
};
}
return {
b: false
};
}
TypeScript 将返回类型推断为:
function foo(): {
a: number;
b?: undefined;
} | {
b: boolean;
a?: undefined;
}
出于我的目的,最好将其推断为:
function foo(): {
a: number;
} | {
b: boolean;
}
我知道我可以通过在foo
的定义中手动包含返回类型来强制这样做。但我问这个问题是因为实际上我有一个返回值更复杂的函数,我不想手动编写返回值的类型,然后永远保持同步。
有没有办法让 TypeScript 像我想要的那样自动推断返回类型?
奇怪的是,如果你先将返回值分配给一个临时变量,返回类型就是你所期望的:
function foo() {
if (Math.random() > 0.5) {
const ret = { a: 5 };
return ret;
} else {
const ret = { b: false };
return ret;
}
}
缩小范围并帮助 Ts,通过将返回类型存储在 const 中来帮助 Ts,let。
function foo() {
const isInRage = Math.random() < 0.5;
const inRageResults = { a: 5 };
const outOfRangeResults = { b: false };
return isInRage ? inRageResults : outOfRangeResults;
}
然后你应该得到你的窄类型:
{
a: number;
} | {
b: boolean;
}