JSDoc,将POJO视为Class的实例

时间:2018-06-15 12:06:48

标签: javascript ecmascript-6 webstorm jsdoc

我有一个类和一个函数,它将该类的实例或类似的POJO对象作为参数。

我想使用JSDoc注释这个函数。

class Test {
    constructor(a, b) {
        this.a = a;
        this.b = b;
    }
}

/**
 * @param {Test} test
 */
function handleTest(test) {
    console.log(test.a, test.b);
}

// Webstorm complains that argument is not of type Test
handleTest({
    a: 'this is a'
});

使用@param {Test} test 几乎有效...但WebStorm抱怨POJO不能分配给Test类型。

我是否可以做一些JSDoc技巧,以明确TestTest类对象的实例都可以?

1 个答案:

答案 0 :(得分:0)

使用type union

/**
 * @param {Test|{a,b}} test
 */
function handleTest(test) {
  console.log(test.a, test.b);
}

该类型的|{a,b}部分表示单独的允许类型。您可以只使用{Test|{}},但IDE不知道ab是预期的属性。

这是简写版;您还可以定义“Test-like”对象,以防您计划在多个地方使用和记录TestLike对象:

/**
 * @typedef {object} TestLike
 * @property {string} a - some property a
 * @property {string} b - some property b
 */

/**
 * @param {Test|TestLike} test
 */
handleTest(test) {
  // ...
}