希望有人可以帮助我,我在尝试弄清楚如何使WebStorm的TypeScript Lint处理特定的回调数据时遇到了一个小问题,这不是可选的。
我具有要导出的功能:
test(callback: (data: string) => void) {
callback('Hello from Index');
}
并使用它:
TestClass.test(() => {
console.log(`This is data from Tester: ${}`);
})
但是TypeScript检查器没有发现我没有输入非可选参数。回调参数是在函数中专门设置的;
callback: (data: string)
我在这里的主要目的是强制每个没有可选参数的函数至少键入参数(不一定要在导出的函数中使用确切的名称,而是必须具有这样的名称,例如:< / p>
TestClass.test((result) => {
console.log(This is data from Tester: ${});
})
谢谢!
答案 0 :(得分:1)
这是设计使然。如果您有一个将接收参数的回调参数,但是回调的实现不使用参数则没有问题,则将忽略这些参数。
如果没有指定参数,我们可以执行一些“聪明的”条件键入以强制编译器给出错误:
type IsValidArg<T> = T extends object ? keyof T extends never ? false : true : true;
type HasArgument<T, TError> = (T extends (arg: infer U)=> void ? IsValidArg<U> extends true ? {} : TError :TError )
class TestClass {
static test<T extends (data: string) => void>(callback: T & HasArgument<T, "You need to have an argument to the implementation">): void
static test(callback: (data: string) => void) {
callback('Hello from Index');
}
}
//OK
TestClass.test((data) => {
console.log(`This is data from Tester: ${data}`);
})
//Type '() => void' is not assignable to type '"You need to have an argument to the implementation"'.
TestClass.test(() => {
console.log(`This is data from Tester: ${0}`);
})
错误消息不是很理想,但足够明确。
您还可以使用"noUnusedParameters": true
中的tsconfig.json
强制调用者对参数执行操作