WebStorm 的 TypeScript Lint:回调参数类型
WebStorm's TypeScript Lint: Callback Parameter Type
希望有人能帮助我,我在尝试弄清楚如何让 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)
我这里的主要 objective 是强制每个没有可选参数的函数至少键入参数(不一定使用导出函数中的确切名称,但将其作为必须如此:
TestClass.test((result) => {
console.log(This is data from Tester: ${});
})
提前致谢!
这是设计使然。如果你有一个将接收参数的回调参数,但回调的实现不使用参数没有问题,参数只是被忽略。
我们可以做一些'clever'条件类型来强制编译器在没有指定参数的情况下给出错误:
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: [=10=]`);
})
错误信息不够理想,但足够明确。
您还可以使用 tsconfig.json
中的 "noUnusedParameters": true
强制调用者对参数执行某些操作
希望有人能帮助我,我在尝试弄清楚如何让 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)
我这里的主要 objective 是强制每个没有可选参数的函数至少键入参数(不一定使用导出函数中的确切名称,但将其作为必须如此:
TestClass.test((result) => {
console.log(This is data from Tester: ${});
})
提前致谢!
这是设计使然。如果你有一个将接收参数的回调参数,但回调的实现不使用参数没有问题,参数只是被忽略。
我们可以做一些'clever'条件类型来强制编译器在没有指定参数的情况下给出错误:
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: [=10=]`);
})
错误信息不够理想,但足够明确。
您还可以使用 tsconfig.json
"noUnusedParameters": true
强制调用者对参数执行某些操作