我想实现一个可以通过不同参数推断返回类型的函数.
直接调用时正常可以推断出类型,但使用函数返回参数时,推断会不正确.
以下是我写的重新加载代码:
export interface Option {
init?: boolean
test?: boolean
}
function getType(): string
function getType(option: Record<string, never>): string
function getType(option: Option & { init: true }): boolean
function getType(option: Option & { init: false }): string
function getType(
option?: Option,
): Option extends { init: true } ? boolean : string
function getType(option?: Option): boolean | string {
if (option?.init) {
return true
} else {
return 'none'
}
}
getType() // string
getType({}) // string
getType({
init: true,
}) // boolean
getType({
init: false,
}) // string
getType({
test: false,
}) // string
function useGetType(opt?: Option) {
return getType(opt)
}
// What should be inferred here is boolean
useGetType({ init: true }) // string ???