没有准确的翻译。这是我写这个的方法:
/** @enum {string} */
var ResultStatus = {
DONE: 'done',
ERROR: 'error'
};
/** @record */
var Done = function() {};
/** @type {ResultStatus} */
Done.prototype.status;
/** @type {Matrix} */
Done.prototype.answer;
/** @record */
var Error = function() {};
/** @type {ResultStatus} */
Error.prototype.status;
/** @type {string} */
Error.prototype.message;
/** @type {Result|Error} */
var Result;
这是一个非常冗长的语法,但提供了最好的类型检查。假定具有这些属性的任何对象都与类型匹配。允许额外的属性。
有一个更短的语法,行为略有不同:typedefs。
/** @enum {string} */
var ResultStatus = {
DONE: 'done',
ERROR: 'error'
};
/**
* @typedef{{
* status: ResultStatus
* answer: Matrix
* }}
*/
var Done;
/**
* @typedef{{
* status: ResultStatus
* message: string
* }}
*/
var Error;
/** @type {Result|Error} */
var Result;
还有其他几种编写这些类型的方法。您选择哪个取决于您要检查的内容。例如,如果您拼错(或尝试添加)某个属性,您是否需要警告?您想要两个属性名称或类型完全匹配,还是允许额外的属性?