WebStorm';s TypeScript Lint:回调参数类型
希望有人能帮助我,我在试图找出如何让WebStorm的TypeScript Lint处理特定回调数据时遇到了一个小问题,这不是可选的 我有一个正在导出的函数:WebStorm';s TypeScript Lint:回调参数类型,typescript,callback,webstorm,lint,Typescript,Callback,Webstorm,Lint,希望有人能帮助我,我在试图找出如何让WebStorm的TypeScript Lint处理特定回调数据时遇到了一个小问题,这不是可选的 我有一个正在导出的函数: test(callback: (data: string) => void) { callback('Hello from Index'); } 使用它: TestClass.test(() => { console.log(`This is data from Tester: ${}`); }) 但
test(callback: (data: string) => void) {
callback('Hello from Index');
}
使用它:
TestClass.test(() => {
console.log(`This is data from Tester: ${}`);
})
但是TypeScript检查器没有发现我没有输入非可选的参数。回调参数是在函数中专门设置的
回调:(数据:字符串)
我在这里的主要目标是强制每个没有可选参数的函数至少键入参数(不一定在导出的函数中使用确切的名称,但必须使用它,因此:
TestClass.test((result) => {
console.log(This is data from Tester: ${});
})
提前感谢!这是设计的。如果您有一个将接收参数的回调参数,但是回调的实现没有使用参数,那么就没有问题了,参数将被忽略 如果没有指定参数,我们可以执行一些“聪明”的条件类型,强制编译器给出错误:
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}`);
})
type IsValidArg=T extends object?keyof T extends never?false:true:true;
类型HasArgument=(T extends(arg:inferu)=>void?IsValidArg extends true?{}:TError:TError)
类TestClass{
静态测试void>(回调:T&HasArgument):void
静态测试(回调:(数据:字符串)=>void){
回调('Hello from Index');
}
}
//嗯
TestClass.test((数据)=>{
log(`这是来自Tester的数据:${data}`);
})
//类型“()=>void”不可分配给类型““您需要有一个实现参数””。
TestClass.test(()=>{
log(`这是来自测试仪的数据:${0}`);
})
错误消息并不理想,但足够明确
您还可以使用
“noUnusedParameters”强制调用方对参数执行某些操作:true
在tsconfig.json
中,这是经过设计的。如果您有一个将接收参数的回调参数,但回调的实现没有使用参数,则没有问题,这些参数只是被忽略。是否有任何方法可以强制至少设置回调的实现,而不是必需的当然,我经常使用,比如typescript.json中的任何设置?我对typescript完全不熟悉,即使有很好的文档,也很难找到正确的术语到谷歌,以获得正确的结果。当然我们可以,实际上强制使用更简单,我们可以只使用“noUnusedParameters”:true
谢谢,nounusedParameters正是我想要的!