尝试部署Firebase函数时JSDoc语法错误



我得到一个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.

最新更新