WebStorm的TypeScript Lint:回调参数类型

时间:2018-06-28 13:49:13

标签: 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: ${}`); 
})

但是TypeScript检查器没有发现我没有输入非可选参数。回调参数是在函数中专门设置的;

callback: (data: string)

我在这里的主要目的是强制每个没有可选参数的函数至少键入参数(不一定要在导出的函数中使用确切的名称,而是必须具有这样的名称,例如:< / p>

TestClass.test((result) => {
      console.log(This is data from Tester: ${}); 
})

谢谢!

1 个答案:

答案 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强制调用者对参数执行操作