[英]argument of type 'any' is not assignable to parameter of type 'never' typescript solution
[英]typescript ReturnType is “any” if parameter type is “never”
短篇故事
const abc = (a:never):number=>1
type a = ReturnType< typeof abc> //any
const abc2 = (a:number, b:never):number=>1
type a2 = ReturnType< typeof abc2> //any
ReturnType 是 any 如果參數的任何類型從不,無論如何要克服這個問題?
長篇大論(如果您對用例感到好奇)
我有一個實用程序類型,可以防止未定義的部分對象成員、空對象或多余的對象成員完美地工作
type _NoExcessEmptyUndefined<M, T> = M extends T
? keyof M extends keyof T
? keyof M extends never
? never
: undefined extends M[keyof M]
? never
: M
: never
: never
type something = {a?:number,b:boolean,c:string}
const abc = <M extends something>(data:_NoExcessEmptyUndefined<M,something>):number=>1
const emptyObject = {}
const undefinedPartial = {a:undefined,b:true,c:"1"}
const excessMember = {b:true,c:"1",d:1}
abc(emptyObject) // error if empty object
abc(undefinedPartial) // error if partial member is undefined
abc(excessMember) // error if excessMember
const success1 = {b:true,c:"1"}
const success2 = {a:1, b:true,c:"1"}
abc(success1) // no error
abc(success2) // no error
type haha = ReturnType<typeof abc> // haha is any <-- problem
type hihi = Parameters<typeof abc>[0] // hihi is never
我不知道為什么這會在您的情況下給出any
,但是您可以編寫自己的ReturnType
版本,該版本可以正常工作:
type MyReturnType<F extends Function> = F extends (...args: infer A) => infer R ? R : never;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.