2 回答
TA贡献1757条经验 获得超8个赞
您可以使用函数重载:
interface Foo {
bar: number,
baz: number,
}
interface FooEnabled extends Foo {
enabled: true,
}
interface Result {
result: number;
}
interface IsEqual extends Result {
isEqual: boolean
}
function foo(foo: FooEnabled): IsEqual;
function foo<T extends Foo>(foo: T): Result;
function foo({bar, baz, enabled}: FooEnabled): Result | IsEqual {
const result = baz + bar;
if (enabled) {
return {
result,
isEqual: bar === baz,
}
}
return {
result,
}
}
const {result} = foo({
bar: 5,
baz: 5,
});
const {result: anotherOneResult, isEqual} = foo({
bar: 5,
baz: 5,
enabled: true,
})
TA贡献1911条经验 获得超7个赞
您可以在打字稿中为函数定义多个返回类型。对于您的示例,您可以这样做:
function foo({bar, baz,enabled=false}: Foo): Result | AnotherResult { return (enabled==true)?{result: bar + baz, isEqual: true}: {result: bar + baz} ; }
添加回答
举报