typescript返回类型为“返回”;任何;如果参数类型为";决不;
短篇小说typescript返回类型为“返回”;任何;如果参数类型为";决不;,typescript,Typescript,短篇小说 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 const abc=(a:never):数字=>1 类型a=ReturnType//任何 常量abc2=(a:数字,b:从不):
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
const abc=(a:never):数字=>1
类型a=ReturnType//任何
常量abc2=(a:数字,b:从不):数字=>1
a2型=返回型//任何
ReturnType是any,若任何类型的参数都是never,那个么有什么方法可以克服这个问题吗
长话短说(以防您对用例感到好奇)
我有一个实用程序类型,可以防止未定义的部分对象成员、空对象或多余的对象成员完美地工作
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
type\u NoExcessEmptyUndefined=M扩展了T
? M的键扩展了T的键
? M的键永远不会扩展
? 从未
:未定义的扩展名M[keyof M]
? 从未
:M
:从不
:从不
键入某物={a?:数字,b:布尔值,c:字符串}
常量abc=(数据:_NoExcessEmptyUndefined):数字=>1
常量emptyObject={}
常量undefinedPartial={a:未定义,b:真,c:“1”}
const excessMember={b:true,c:1,d:1}
abc(emptyObject)//对象为空时出错
abc(undefinedPartial)//如果部分成员未定义,则出错
abc(excessMember)//如果excessMember发生错误
const success1={b:true,c:“1”}
const success2={a:1,b:true,c:“1”}
abc(成功1)//无错误
abc(成功2)//无错误
type haha=ReturnType//haha是any我不知道为什么在您的情况下会出现any
,但是您可以编写自己的ReturnType
版本,该版本可以正常工作:
type MyReturnType<F extends Function> = F extends (...args: infer A) => infer R ? R : never;
typemyreturntype=F扩展(…参数:推断A)=>推断R?R:从来没有;
我建议将此作为;这是一个令人惊讶的行为,我找不到一个现有的问题提到它。虽然(a:never)=>0
可分配给(…args:any)=>any
,但它不可分配给条件类型中的(…args:any)=>推断R
。实际上,我认为带有never
的参数列表不是很有用,所以这几乎不是什么大问题,但可能应该加以跟踪。问题已解决: