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} ; }
添加回答
舉報