TypeScript开发Google Cloud Functions时PubSub触发事件与上下文的类型导入问题
解决Google Cloud Functions PubSub触发函数的TypeScript类型问题
哈哈,我当初也踩过这个坑!你找错包啦——@google-cloud/pubsub是用来操作PubSub服务本身(比如发消息、建订阅)的,而Cloud Functions里PubSub触发函数的event和context类型定义根本不在这个包里。下面给你说正确的解法:
1. 装对类型依赖
你需要安装@types/google-cloud__functions这个开发依赖,它把Google Cloud Functions各种触发场景的类型都给备齐了:
npm install --save-dev @types/google-cloud__functions
2. 导入类型并标注参数
从这个包里面导入PubSubEvent(对应你的event参数)和Context(对应context参数),直接给函数参数加上类型标注就行:
import type { PubSubEvent, Context } from '@types/google-cloud__functions'; exports.readMessage = async (event: PubSubEvent, context: Context): Promise<void> => { const message = event.data ? Buffer.from(event.data, "base64").toString() : "No Message"; console.log(message); }
额外提一嘴:新的CloudEvents写法
现在Google Cloud Functions也支持CloudEvents格式的单参数写法,要是你想尝鲜,可以结合@google-cloud/functions-framework和@google-cloud/pubsub的类型来写:
先装依赖:
npm install @google-cloud/functions-framework @google-cloud/pubsub
然后代码改成这样:
import type { CloudEvent } from '@google-cloud/functions-framework'; import type { PubSubMessage } from '@google-cloud/pubsub'; exports.readMessage = async (cloudEvent: CloudEvent<PubSubMessage>): Promise<void> => { const messageContent = cloudEvent.data?.data ? Buffer.from(cloudEvent.data.data, 'base64').toString() : "No Message"; console.log(messageContent); }
这样一来,TypeScript的类型报错就彻底消失啦!
内容的提问来源于stack exchange,提问作者jmadan
相关产品推荐
相关产品推荐

