Typescript 如何只指定函数的返回类型而不指定参数?
代码如下:Typescript 如何只指定函数的返回类型而不指定参数?,typescript,generics,typescript-typings,typescript-generics,Typescript,Generics,Typescript Typings,Typescript Generics,代码如下: const t={ k1:null, k2:null, } 常数a={ k1:()=>null, k2:(arg1:number)=>null, } a、 k1() a、 k2() 现在我想让对象“a”由对象“t”中的键控制,我想当我将“t”上不存在的键k3、k4写入“a”时,应该有一个错误 所以我试着这样做 const t={ k1:null, k2:null, } 常数a:记录无效>={ k1:()=>null, k2:(arg1:number)=>null, } a、 k1(
const t={
k1:null,
k2:null,
}
常数a={
k1:()=>null,
k2:(arg1:number)=>null,
}
a、 k1()
a、 k2()
现在我想让对象“a”由对象“t”中的键控制,我想当我将“t”上不存在的键k3、k4写入“a”时,应该有一个错误
所以我试着这样做
const t={
k1:null,
k2:null,
}
常数a:记录无效>={
k1:()=>null,
k2:(arg1:number)=>null,
}
a、 k1()
a、 k2()
但当我调用a.k2时,并没有参数提示,即使我并没有输入参数,编译器也并没有错误
因此,我在脑海中写下:
const t={
k1:null,
k2:null,
}
常数a:记录为空>={
k1:()=>null,
k2:(arg1:number)=>null,
}
a、 k1()
a、 k2()
但是,编译器中有一个错误:
“args”在其自己的类型批注中直接或间接引用
我最后想要的是:
const t={
k1:null,
k2:null,
}
常数a:??={
k1:()=>null,
k2:(arg1:number)=>null,
k3:()=>null,//应该有一个错误,比如在typeof t的keyof中不存在'k3'
}
a、 k1()
a、 k2()//应该有一个错误,如未提供“arg1”的参数。
我不知道类型“?????”应该替换为什么
我能为“关键控制和参数提示”做些什么?或者我如何只指定函数的返回类型而不指定参数?您不能在类型批注中指定变量的类型,并让编译器从初始化表达式推断该变量的详细信息 你能做的就是使用一个函数。函数既可以从参数推断,也可以根据约束检查这些参数:
const t = { k1: null, k2: null }
function asFunctions<T>() {
return function <U extends Record<keyof T, (...args: any[]) => void>>(o: U) {
return o
}
}
const a = asFunctions<typeof t>()({
k1: () => null,
k2: (arg1: number) => null,
});
a.k1()
a.k2() // err now
const t={k1:null,k2:null}
函数asFunctions(){
返回函数>(o:U){
返回o
}
}
常数a=asFunctions()({
k1:()=>null,
k2:(arg1:number)=>null,
});
a、 k1()
a、 k2()//现在出错
但现在我被允许在“a”中添加k3和k4,它们在“t”中不存在,我认为这是要求。。您可以将其更改为不需要
t
中的密钥,如下所示:这是一项要求,我不想将k3 k4添加到“a”中,而“t”中不存在。您可以在那里看到它,我想要k3,但有一个错误:)@Ztory抱歉回复太晚,泛型禁用多余的属性检查。我们可以像这样将它们添加回: