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