Nur*_*yev 4 typescript typescript-typings
我有一个重载的函数:
interface FunctionWithOverload {
(): {
a: 1
b: 1
}
<T>(arg: T): {
a: 1
b: 1
} & (T extends number ? { c: 1 } : {})
}
const fwo: FunctionWithOverload = () => {return {} as any}
const result = fwo() // result has a nice type: {a: 1, b: 1}
const result1 = fwo(1) // result1 does not: {a: 1, b: 1} & {c: 1}
Run Code Online (Sandbox Code Playgroud)
如果将鼠标悬停在 上,您可以看到工具提示中result有一个很好的 type ,但有一个丑陋的 type 。{a:1,b:1}result1{a:1, b:1} & {c:1}
问题是:我如何以某种方式合并{a:1, b:1} & {c:1}到{a:1, b:1, c:1}我的情况?
函数重载必须保持原样,即不允许我c向返回类型添加相互可选属性。
任何类型别名都不应添加到工具提示的输出中(除非它是此问题的唯一解决方案)。
漂亮很重要,因为它符合我的任务要求。
我已经设法(在 TitianCernicova-Dragomir 的帮助下)解决了这个问题!像这样:
interface FunctionWithOverload {
(): {
a: 1
b: 1
}
<T>(arg: T): Id<{
a: 1
b: 1
} & (T extends number ? { c: 1 } : {})>
}
type Id<T>={} & { [P in keyof T] :T[P]}
const fwo: FunctionWithOverload = () => {return {} as any}
const result = fwo() // result has a nice type: {a: 1, b: 1}
const result1 = fwo(1) // result1 DOES HAVE TOO!!! {a: 1, b: 1, c: 1}
Run Code Online (Sandbox Code Playgroud)
我认为它的工作方式可能是:TS 引擎认为映射类型值得被命名为类型,如接口,而任何并集、交集(如上面的解决方案中)或基本类型(如字符串文字)则不然。
| 归档时间: |
|
| 查看次数: |
1091 次 |
| 最近记录: |