gpt4 book ai didi

class - 扩展 Ecmascript 6 类时,Closure 编译器警告 "Bad type annotation. Unknown type …"

转载 作者:行者123 更新时间:2023-12-04 17:59:10 27 4
gpt4 key购买 nike

在使用 Closure Compiler 进行编译时,我收到了每个从另一个类继承的 Ecmascript 6 类的警告:

我已经尽可能地简化了事情,但仍然收到警告:

/src/main/js/com/tm/dev/Dog.js: WARNING - Bad type annotation. Unknown type module$$src$main$js$com$tm$dev$Animal.default

编译后的代码确实可以正确运行。 (我已经尝试了一些只会让事情变得更糟的注释。)任何人都知道这里的预期是什么?

Animal.js:

export default class{
constructor(){
this.legs = [];
}
addLeg(legId){
this.legs.push( legId );
}
}

狗.js:

import Animal from './Animal';

export default class extends Animal {
constructor(){
super();
[1,2,3,4].forEach(leg=>this.addLeg(leg));
console.log( 'Legs: ' + this.legs.toString() );
}
}

最佳答案

警告消息中有提示,但如果您不熟悉 Closure Compiler's annotation inspection 显然会造成混淆.

The Closure Compiler can use data type information about JavaScript variables to provide enhanced optimization and warnings. JavaScript, however, has no way to declare types.

Because JavaScript has no syntax for declaring the type of a variable, you must use comments in the code to specify the data type.

(以下未经测试。)

Closure 编译器报告在 Dog.js 中它无法识别“类型”Animal。这是因为您正在导出未命名的类表达式:export default class

所以你可以给你的类起一个名字(export default class Animal),当 Dog.js 中使用它时,Closure Compiler 可能会识别标记 Animal

你也可以给你的类一个 JSDoc,将它标记为 @constructor:

/**
* Animal.
* @constructor
*/
export default class Animal {}

关于class - 扩展 Ecmascript 6 类时,Closure 编译器警告 "Bad type annotation. Unknown type …",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37577183/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com