[英]is there a way to declare a type parameter via JSDoc syntax in javascript for typescript to understand
[英]How to type a JavaScript function with JSDoc + TypeScript?
我正在嘗試將tsc
與普通的 Vanilla JS 一起使用,但我對如何聲明類型為 function 感到困惑。
看起來應該是這么簡單:
/** @type PersonGreet */
person.greet = function greet(other) {
return `Hello ${other.name}, my name is ${person.name}!`;
};
忽略這樣一個事實,即有人可能希望將其重構為使用類或原型或類似的東西——它很好地說明了問題。
回購: https://github.com/BeyondCodeBootcamp/hello-tsc
"use strict";
/**
* @typedef {Object} Person
* @property {String} name
* @property {PersonGreet} greet
*/
/**
* @typedef {Function} PersonGreet
* @param {Person} other
* @returns {String}
*/
let Person = {};
/**
* Creates a person
* @param {Object} p
* @param {String} p.name
* @returns {Person}
*/
Person.create = function (p) {
let person = {};
person.name = p.name;
/////////////////////////////////////////////////////////////////////////////////
//
// error TS7006: Parameter 'other' implicitly has an 'any' type. <======= WRONG!
//
/////////////////////////////////////////////////////////////////////////////////
/** @type PersonGreet */
person.greet = function greet(other) {
return `Hello ${other.name}, my name is ${person.name}!`;
};
return person;
};
module.exports = Person;
當我運行tsc
進行檢查時,它給出了一個關於隱式 any 的錯誤:
tsc -p jsconfig.json
person.js:28:33 - error TS7006: Parameter 'other' implicitly has an 'any' type.
28 person.greet = function greet(other) {
~~~~~
Found 1 error in person.js:28
對我來說,這似乎是tsc
中的一個錯誤……但這是 JS 101 的東西,肯定有辦法輸入 function 嗎?
我需要使用什么注釋來聲明函數的類型? 或者tsc
/ tsserver
/ typescript
不能處理這種基本的 JS 使用?
您應該像這樣使用@callback
而不是@function
:
"use strict";
/**
* @typedef {Object} Person
* @property {String} name
* @property {PersonGreet} greet
*/
/**
* @callback PersonGreet
* @param {Person} other
* @returns {String}
*/
let Person = {};
/**
* Creates a person
* @param {Object} p
* @param {String} p.name
* @returns {Person}
*/
Person.create = function (p) {
let person = {};
person.name = p.name;
/** @type {PersonGreet} */
person.greet = function greet(other) {
return `Hello ${other.name}, my name is ${person.name}!`;
};
return person;
};
module.exports = Person;
或者,使用 typescript 語法聲明@typedef
,如下所示:
/**
* @typedef {(other: Person) => string} PersonGreet
*/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.