Typescript Return 类型:显式模块边界类型错误
Typescript Return Types: explicit-module-boundary-types error
我正在尝试从 Node 迁移到 Typescript 进行调整,所以我设置了一堆 eslint 来帮助我:
我似乎无法理解以下 eslint 错误:
函数中缺少 return 类型。 eslint@typescript-eslint/explicit-module-boundary-types
这是我的代码,错误是在 sns 函数上引发的。
const sns = ({config, logger}: SNSInterface) => {
const client = new SNSClient({endpoint: config.sns.endpoint});
const publish = async ({message, topicArn}: PublishInterface) : Promise<void> => {
const command = new PublishCommand({
Message: JSON.stringify(message),
TopicArn: topicArn,
});
logger.debug({message, topicArn}, 'Publishing SNS Message');
const data = await client.send(command).catch((err) => {
logger.error(err, 'Failed to send Topic ARN');
throw err;
});
logger.debug({data}, 'Publishing SNS Message Results');
};
return {
publish,
};
};
export default sns;
虽然我可以通过添加来解决它:
interface SNSReturnInterface {
publish: ({ message, topicArn }: PublishInterface) => Promise<void>;
}
const sns = ({config, logger}: SNSInterface): SNSReturnInterface => {
这真的是最好的方法吗?我认为 Typescript 应该可以推断出这个?如果我想向发布函数添加一个参数,是否意味着我也必须每次都更改 ReturnInterface 定义?除非必要,否则我不想关闭规则。感谢任何建议!
explicit-module-boundary-types
规则意味着您需要明确告诉 Typescript sns
函数正在 return 编辑什么。
在您的示例中,您已经定义了 publish
的类型,但是您没有明确定义 sns
(return { publish }
) 的 return 类型。
Typescript 本身完全可以推断这些类型,但规则希望您明确说明,这就是您的第二个示例有效的原因。
如果你想让 Typescript 自动推断这些 return 类型,那么你应该关闭那个 eslint 规则。
或者,如果您希望保留规则,但只定义一次类型,则可以像在第二个示例中那样定义 return 类型,并在其他地方省略它们.这样,您就可以明确定义边界类型(导出的 sns
对象),Typescript 可以使用它来推断 publish
.
的类型
我正在尝试从 Node 迁移到 Typescript 进行调整,所以我设置了一堆 eslint 来帮助我:
我似乎无法理解以下 eslint 错误:
函数中缺少 return 类型。 eslint@typescript-eslint/explicit-module-boundary-types
这是我的代码,错误是在 sns 函数上引发的。
const sns = ({config, logger}: SNSInterface) => {
const client = new SNSClient({endpoint: config.sns.endpoint});
const publish = async ({message, topicArn}: PublishInterface) : Promise<void> => {
const command = new PublishCommand({
Message: JSON.stringify(message),
TopicArn: topicArn,
});
logger.debug({message, topicArn}, 'Publishing SNS Message');
const data = await client.send(command).catch((err) => {
logger.error(err, 'Failed to send Topic ARN');
throw err;
});
logger.debug({data}, 'Publishing SNS Message Results');
};
return {
publish,
};
};
export default sns;
虽然我可以通过添加来解决它:
interface SNSReturnInterface {
publish: ({ message, topicArn }: PublishInterface) => Promise<void>;
}
const sns = ({config, logger}: SNSInterface): SNSReturnInterface => {
这真的是最好的方法吗?我认为 Typescript 应该可以推断出这个?如果我想向发布函数添加一个参数,是否意味着我也必须每次都更改 ReturnInterface 定义?除非必要,否则我不想关闭规则。感谢任何建议!
explicit-module-boundary-types
规则意味着您需要明确告诉 Typescript sns
函数正在 return 编辑什么。
在您的示例中,您已经定义了 publish
的类型,但是您没有明确定义 sns
(return { publish }
) 的 return 类型。
Typescript 本身完全可以推断这些类型,但规则希望您明确说明,这就是您的第二个示例有效的原因。
如果你想让 Typescript 自动推断这些 return 类型,那么你应该关闭那个 eslint 规则。
或者,如果您希望保留规则,但只定义一次类型,则可以像在第二个示例中那样定义 return 类型,并在其他地方省略它们.这样,您就可以明确定义边界类型(导出的 sns
对象),Typescript 可以使用它来推断 publish
.