Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.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
Javascript TypeScript:`Any';从函数调用中分解对象_Javascript_Typescript - Fatal编程技术网

Javascript TypeScript:`Any';从函数调用中分解对象

Javascript TypeScript:`Any';从函数调用中分解对象,javascript,typescript,Javascript,Typescript,当我从函数调用中解构时,我有一个奇怪的行为——我得到的变量变成了any。但如果我不进行分解,它们的类型是正确的。一件事是,它取决于参数的数量 const contexts={a:{c:1},b:2} 类型AppContexts=类型上下文; 导出函数useApp< C扩展数组, ResultContexts扩展了Pick >(…列表:C):ResultContexts{ 返回空值,如有; } const one=useApp('a','b'); 一个a.c//很好 常数{b}=1;//好的 //

当我从函数调用中解构时,我有一个奇怪的行为——我得到的变量变成了
any
。但如果我不进行分解,它们的类型是正确的。一件事是,它取决于参数的数量

const contexts={a:{c:1},b:2}
类型AppContexts=类型上下文;
导出函数useApp<
C扩展数组,
ResultContexts扩展了Pick
>(…列表:C):ResultContexts{
返回空值,如有;
}
const one=useApp('a','b');
一个a.c//很好
常数{b}=1;//好的
//const{a}=useApp('a');
//a//a是任意的
//const{a}=useApp('a','b');
//a//a是数字

这是否适合您的需要
a是数字
——是吗?@Caramiriel是的,您的解决方案有效,但无论如何,我的示例看起来像TypesScript的bug@zerkms此处
//const{a}=useApp('a');//a//a是any
它是any,但它看起来像abug@aspirisen确实如此,但在最新的一行中,
a
并不是推断为一个
number
。这是否符合您的需要
a是数字
——是吗?@Caramiriel是的,您的解决方案有效,但无论如何,我的示例看起来像TypesScript的bug@zerkms此处
//const{a}=useApp('a');//a//a是any
它是any,但它看起来像abug@aspirisen确实如此,但在最新的一行中,
a
不是推断为
数字。
const contexts = { a: {c: 1}, b: 2 }

type AppContexts = typeof contexts;

export function useApp<
  C extends Array<keyof AppContexts>,
  ResultContexts extends Pick<AppContexts, C extends (infer K)[] ? K : never>
>(...list: C): ResultContexts {
    return null as any;
}

const one = useApp('a', 'b');

one.a.c // good
const { b } = one; // good


// const { a } = useApp('a'); 
// a // a is any

// const { a } = useApp('a', 'b'); 
// a // a is number