Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
WebStorm';s TypeScript Lint:回调参数类型_Typescript_Callback_Webstorm_Lint - Fatal编程技术网

WebStorm';s 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: ${}`); }) 但

希望有人能帮助我,我在试图找出如何让WebStorm的TypeScript Lint处理特定回调数据时遇到了一个小问题,这不是可选的

我有一个正在导出的函数:

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正是我想要的!