如何解決這個問題?
沙盒
const test = <T extends boolean>(def: T = false): true extends T ? number : number | null => {
if (def) {
return 1
} else {
return null
}
};
const x = test(true) // expect number
const x1 = test(false) // expect number | null
const x2 = test() // expect number | null
錯誤:
Type 'boolean' is not assignable to type 'T'.
'boolean' is assignable to the constraint of type 'T', but 'T' could be instantiated with a different subtype of constraint 'boolean'.
uj5u.com熱心網友回復:
您可以多載您的功能:
function test(): number | null
function test(def: false): number | null
function test(def: true): number
function test<T extends boolean>(def?: T) {
if (def) {
return 1 as number
} else {
return null
}
};
const x = test(true) // expect number
const x1 = test(false) // expect number | null
const x2 = test() // expect number | null
第二個場景,帶有第二個引數,-[正在進行中]
// With optional props
function testOpt(x?: number, def?: false): number | null
function testOpt(x?: number, def?: true): number
function testOpt(x?: number, def = false): number | null {
if (def) {
return 1 as number
} else {
return null
}
};
const y1 = testOpt(1, true) // expect number
const y2 = testOpt(1, false) // expect number | null
const y3 = testOpt() // expect number | null
操場
TypeScript 不: true extends T ? number : number | null以您期望的方式支持此行為。
相關問題 24929
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/326542.html
標籤:打字稿
上一篇:迭代物件時如何斷言匹配型別?
