Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
typescript返回类型为“返回”;任何;如果参数类型为";决不;_Typescript - Fatal编程技术网

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
的参数列表不是很有用,所以这几乎不是什么大问题,但可能应该加以跟踪。问题已解决: