我得到一个JSDoc syntax error
指向我的JSDoc注释的第一行,它说/**
。不知道还有什么需要修改的
/**
* Gets any field value from a user's User collection.
* @param {number} IDType 0 = uid, 1 = username.
* @param {string} inputID the input ID, based on the IDType.
* @param {string} desiredField the desired field value.
* @returns {number, string, string} 1/0, error message, desired info.
*/
async function getUserInfo(
IDType: number
, inputID: string
, desiredField: string
): Promise<[number, string, string]> {
//...
可能您的返回类型太复杂,请尝试使用Promise
作为文档显示。
/**
* ...
* @returns {Promise} 1/0, error message, desired info.
*/
@returns
行的类型语句{number, string, string}
是语法错误。
由于函数是async
,类型应该定义为{Promise<ResultType>}
。另外,因为你返回的是一个元组,你应该把number, string, string
用方括号括起来——[number, string, string]
。
这导致声明:
/**
* Gets any field value from a user's User collection.
* @param {number} IDType 0 = uid, 1 = username.
* @param {string} inputID the input ID, based on the IDType.
* @param {string} desiredField the desired field value.
* @returns {Promise<[number, string, string]>} 1/0, error message, desired info.
*/
async function getUserInfo(
IDType: number
, inputID: string
, desiredField: string
): Promise<[number, string, string]> {
//...
}
或者,您也可以为元组定义一个类型,并限制IDType
参数的可接受值:
type IDType = 0 | 1;
type GetUserInfoResult = [ IDType, string, string ];
/**
* Gets any field value from a user's User collection.
* @param {IDType} typeOfInputID 0 = uid, 1 = username.
* @param {string} inputID the input ID, of the given type.
* @param {string} desiredField the desired field value.
* @returns {Promise<GetUserInfoResult>} 1/0, error message, desired info.
*/
async function getUserInfo(
typeOfInputID: IDType // renamed to prevent type conflict
, inputID: string
, desiredField: string
): Promise<GetUserInfoResult> {
//...
}
这允许您解构结果并保持限制类型:
const result = await getUserInfo(1, 'exampleUser', 'displayName');
// type of result: GetUserInfoResult
const [typeOfID, inputId, desiredField] = result;
// type for typeOfID: IDType (accepts only 0 or 1)
// type for inputId: string
// type for desiredField: string
您也可以直接解构结果,并且仍然保留类型:
const [typeOfID, inputId, desiredField] = await getUserInfo(1, 'exampleUser', 'displayName');
// type for typeOfID: IDType (accepts only 0 or 1)
// type for inputId: string
// type for desiredField: string
使用元组类型,您还可以命名元组中的每个值。这些名称只在IDE中使用,对JavaScript中值的使用没有影响。
type GetUserInfoResult = [ typeOfID: IDType, errorMsg: string, strValue: string ];
const result = await getUserInfo(1, 'exampleUser', 'displayName');
result[0] // type shows as "IDType (typeOfID)"
result[1] // type shows as "string (errorMsg)"
result[2] // type shows as "string (strValue)"
const [typeOfID, inputId, desiredField] = result;
// type for typeOfID shows as "IDType"
// type for inputId shows as "string"
// type for desiredField shows as "string"
安装JSDoc Lint…虽然三个返回值对我来说很奇怪:
@returns {number, string, string} 1/0, error message, desired info.
我可能是对的,因为文档中没有使用任何逗号。
@returns {number|string} 1/0, error message or desired info.