在类本身内部为ES6类使用类型

时间:2019-06-13 16:37:18

标签: typescript webstorm typescript-typings

我现有这样的ES6类ClassA.js

module.exports = class A {
  test(param) {
    console.log(param)
  }

  test2(param) {
    this.test() // no warning here
  }
}

我还有一个打字文件ClassA.d.ts

export type A = {
  test(param: string): void
  test2(param: string): void
}

我还有一个index.js

const A = require('./ClassA');

const a = new A();
a.test(1);

按预期,这会导致WebStorm出现编译器错误,因为test期望string

但是我没有收到this.test()内缺少参数的ClassA.js的警告。另外,如果致电this.(1)不会发出警告。

是否可以在类本身内部发出警告?我还可以使用tsc包含ClassA.js并在index.js以及ClassA.js内部收到错误类的编译器警告吗?

2 个答案:

答案 0 :(得分:1)

不应将键入内容用于库本身,不能使IDE(或tsc编译器)为此目的使用它们。 我建议改用JSDoc注释,例如:

module.exports = class A {
    /**
     * @param {string} param
     */
    test(param) {
        console.log(param)
    }
    /**
     * @param {string} param
     */
    test2(param) {
        this.test() // no warning here
    }
}

答案 1 :(得分:-1)

在这里您声明字符串:

export type A = {
  test(param: string): void
  test2(param: string): void
}

因此,在传递参数时,将其传递为:

const A = require('./ClassA');

const a = new A();
a.test("1");

或者如果要传递数字,则将参数类型声明为数字:

export type A = {
  test(param: number): void
  test2(param: number): void
}