我有以下功能:
function doThing(shouldReturnObject: boolean): string | object {
return shouldReturnObject ? { hello: 'world' } : 'hello world';
}
Run Code Online (Sandbox Code Playgroud)
我希望返回值在shouldReturnObjectequals为true 时为对象,但在为false时为字符串.
免责声明:在大多数情况下,这不被视为最佳做法.如果你想这样做,你应该重新考虑你的架构.
-
解决方案是重载函数.为每个参数值重载函数并更新返回类型,如下所示:
doThing(shouldReturnObject: true): object
doThing(shouldReturnObject: false): string
doThing(shouldReturnObject: boolean): string | object {
return shouldReturnObject ? { hello: 'world' } : 'hello world';
}
Run Code Online (Sandbox Code Playgroud)
如果参数是对象,也可以实现这一点.例如:
interface DoThingsSettings {
lazyLoading: boolean;
}
doThing(settings: { lazyLoading: false} & DoThingsSettings): object[]
doThing(settings: { lazyLoading: true} & DoThingsSettings): string[]
doThing(settings: DoThingsSettings): object[] | string[] {
return settings.lazyLoading ? [{ name: 'Peter' }] : ['/user/1'];
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1162 次 |
| 最近记录: |