Используйте наборы для класса ES6 внутри самого класса - PullRequest
2 голосов
/ 13 июня 2019

У меня есть класс 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 ]

1 голос
/ 13 июня 2019

Печатания не должны использоваться для связывания самих библиотек, вы не можете заставить 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
    }
}
0 голосов
/ 13 июня 2019

Здесь вы объявляете строку:

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
}
...