如何使用JSDoc + TypeScript编写JavaScript函数?
如何使用JSDoc + TypeScript编写JavaScript函数?
我试图在纯粹的Vanilla JS中使用
/** @type PersonGreet */ person.greet = function greet(other) { return `Hello ${other.name}, my name is ${person.name}!`; };
\n编辑: /** @type PersonGreet */
是正确的。当前行为是tsc
中的一个错误。下面选择的答案提供了有效的解决方法。\n
简化的测试用例
\n忽略某人可能想要将其重构为使用类或原型等 - 它很好地展示了问题。\n仓库: https://github.com/BeyondCodeBootcamp/hello-tsc\n
"use strict"; /** * @typedef {Object} Person * @property {String} name * @property {PersonGreet} greet */ /** * @typedef {Function} PersonGreet * @param {Person} other * @returns {String} */ let Person = {}; /** * 创建一个人 * @param {Object} p * @param {String} p.name * @returns {Person} */ Person.create = function (p) { let person = {}; person.name = p.name; ///////////////////////////////////////////////////////////////////////////////// // // error TS7006: 参数'other'隐式具有'any'类型。 <======= 错误! // ///////////////////////////////////////////////////////////////////////////////// /** @type PersonGreet */ person.greet = function greet(other) { return `Hello ${other.name}, my name is ${person.name}!`; }; return person; }; module.exports = Person;
\n
错误地被标记为\"any\"
\n当我运行
tsc -p jsconfig.json
\n
person.js:28:33 - error TS7006: 参数'other'隐式具有'any'类型。 28 person.greet = function greet(other) { ~~~~~ 在person.js中找到1个错误:28
\n
怎么办?
\n对我来说,这似乎是
问题:如何使用JSDoc + TypeScript来编写JavaScript函数?
解决方案1:
"use strict"; /** * {Object} Person * {String} name * {PersonGreet} greet */ /** * PersonGreet * {Person} other * {String} */ let Person = {}; /** * Creates a person * {Object} p * {String} p.name * {Person} */ Person.create = function (p) { let person = {}; person.name = p.name; /** {PersonGreet} */ person.greet = function greet(other) { return `Hello ${other.name}, my name is ${person.name}!`; }; return person; }; module.exports = Person;
解决方案2:
/** * {(other: Person) => string} PersonGreet */
附注:似乎tsc
完全无法识别。