【问题标题】:unknown data type in typescript打字稿中的未知数据类型
【发布时间】:2022-01-01 23:46:22
【问题描述】:

我有以下代码可以访问秘密管理器

export interface ConfigData {
dbname:string;
dbuser:string;
}

我在秘密管理器中保存 json 数据,例如

{
"dbname" : "dbname",
"dbuser" : "dbuser"
}

功能

private static async fetchSecretData(){
     let config_key = 'projects/xx/xx/xx/versions/latest';
    
       const client = new SecretManagerServiceClient();
       const [version] = await client.accessSecretVersion({name:config_key})
       console.log(version.payload?.data )
       return version.payload?.data?.toString() as unknown as ConfigData;
 }

但我需要将其转换为未知的 ConfigData,

我想在不让它未知的情况下强制转换此 ConfigData。

如果没有替代方法可以做到这一点,那么从这个未知对象中获取密钥的最佳选择是什么。

谢谢

【问题讨论】:

    标签: javascript typescript google-cloud-platform


    【解决方案1】:

    两个备注:

    • toString() 将返回 string 的任何 data 表示形式,因此将其转换为任何其他类型都行不通。
    • 看起来SecretManagerServiceClientGoogle Cloud Secret Manager API 的一部分。您不必为它们提供自己的类型,因为 @google-cloud/secret-manager 包已经带有自己的类型定义。
    • 从这个包中,我可以看出负载是这样输入的:
                    /** Properties of a SecretPayload. */
                    interface ISecretPayload {
    
                        /** SecretPayload data */
                        data?: (Uint8Array|string|null);
                    }
    

    对我来说,这个data 应该是什么还不是很清楚。如果它是 JSON 字符串,那么您需要使用 JSON.parse(version.payload.data) 对其进行解析,然后将 as ConfigData 附加到该字符串,以让 TypeScript 知道输出的形状。如果是Uint8Array,则需要先.toString,然后再使用JSON.parse 解析它。

    所以你会得到类似的东西:

    private static async fetchSecretData() {
        let config_key = 'projects/xx/xx/xx/versions/latest';
        const client = new SecretManagerServiceClient();
        const [version] = await client.accessSecretVersion({name:config_key})
        if(version?.payload?.data) {
            return JSON.parse(version.payload.data) as ConfigData
        } else {
            return null;
        }
     }
    

    【讨论】:

    • 是的,这个 googel cloud secrete manager api,我想提供我自己的类型,以便轻松访问 .dbname et.c 等属性
    • 好吧,这是有道理的。你能看到version.payload.data 实际包含的内容吗?例如。通过使用调试器检查它或使用console.log 将其打印到控制台?我认为您可能需要像JSON.parse 这样进行一些后期处理,但我不确定。
    猜你喜欢
    • 2020-12-22
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 2022-12-05
    • 1970-01-01
    相关资源
    最近更新 更多