【发布时间】:2021-12-02 11:43:48
【问题描述】:
JavaScript 模块“@google-cloud/iot”似乎与此处 (https://googleapis.dev/nodejs/iot/latest/index.html) 的文档不太相似。
例如,函数client.sendCommandToDevice() 被记录为返回类型SendCommandToDeviceResponse,而它实际上返回接口和未定义的复杂交集。我可以在模块内的命名空间嵌套中找到正确的类型,但即使这样我也无法从结果中获取我需要的数据。例如,...Response 类型有一个静态函数“toJSON()”,它接受一个响应并返回 JSON——但它不会接受实际的响应对象,我找不到任何方法来转换实际的响应对象将响应对象转换为预期的类型。
这不是唯一的此类错误。这可能是在没有检查它是否真的可以在 TypeScript 中使用的情况下将旧的 JavaScript API 过度仓促转换为 TypeScript 的产物吗?是否有一些关于旧 JavaScript API 的文档可供我比较?
这是一个代码 sn-p(转译前):
// node 14.17.3, TypeScript 4.4.4, iot 2.5.1
import iot from "@google-cloud/iot";
// Yes, I did the credentials thing...
const client = new iot.v1.DeviceManagerClient();
function generateRequest(id: string, data: any) {
const formattedName = client.devicePath("myproject", "us-central1", "myregistry", id);
const binData = Buffer.from(JSON.stringify(data)).toString("base64");
return {
ok: true,
name: formattedName,
binData: binData,
};
}
async function run() {
const project = await client.getProjectId();
const parent = client.locationPath(project, 'us-central1');
const deviceId = "d99999995";
const data = { get: [ "program" ] };
const request = generateRequest(deviceId, data);
let r = await client.sendCommandToDevice(request);
// what is r here???
/* Same issue with, e.g.:
client.updateDevice();
client.modifyCloudToDeviceConfig()
*/
return {
ok: true,
result: r,
};
}
run().catch((err) => { console.error(err); });
【问题讨论】:
-
你的问题是一个没有细节的好例子。提供您遇到的问题的示例。包括库、节点、tsc 等重要项目的版本。如果我们可以简单地复制并粘贴您的示例,然后利用我们的经验来帮助您解决问题,那么得到一个好的答案会容易得多。
-
感谢您的回音——我不确定您在寻找什么样的细节。专门命名的函数(sendCommandToDevice,以及其他类似 updateDevice 和 modifyCloudToDeviceConfig)被记录为返回特定类型,但它们没有。我想调用该类型的文档函数,但我不能,因为返回不是其中之一。什么不清楚?
-
通过提供带有详细信息的示例代码,我不必猜测您编写了哪些代码、要包含哪个版本的库、要安装哪个版本的工具来复制您的问题。阅读此链接:stackoverflow.com/help/minimal-reproducible-example
-
如果我正确阅读了文档... googleapis.dev/nodejs/iot/latest/… ... sendCommandToDevice 的调用返回的是 不是 SendCommandToDeviceResponse 而是一个 JavaScript Promise,当解决时... 解析为 SendCommandToDeviceResponse。
-
嗯,是的,这是一个承诺——我知道那部分。它解析为未记录的复杂联合类型。我已经添加了代码。我只想知道通话是否成功;该信息在记录的返回类型中,但我不知道如何从实际返回中获取它。
标签: node.js typescript google-cloud-platform google-api google-cloud-iot