如何在TypeScript中使用索引签名和动态变量键入对象?

phifa

我是TypeScript的新手,并尝试了多种输入方式,但是遇到了索引签名问题。接口应该是什么样?

interface MyConfig {
...
}

// someVar can be any string
let someVar = "dynamicKey";

// the structure of the object cannot change
const config: MyConfig = {
  myObj: {
    [someVar]: {
      firstProp: 'some text',
      secondProp: 'some text',
    },
    thirdProp: 'some text',
  },
};


基拉

如果您知道someVar变量的确切值,则可以使用严格的接口,例如:

interface MyConfig {
    myObj: {
        SomeKey: {
            firstProp: string
            secondProp: string
        },
        thirdProp: string
    }
}

然后,您可以使用:

const someVar = "SomeKey";

const config: MyConfig = {
    myObj: {
        [someVar]: {
            firstProp: 'some text',
            secondProp: 'some text',
        },
        thirdProp: 'some text',
    },
};

但是,如果您希望这种变化someVar是动态的,那就有些棘手了。为此,我建议您将动态零件移至单独的块,以便可以使用:

interface MyConfig {
    myObj: {
        dynamic: {
            [key: string]: {
                firstProp: string
                secondProp: string
            }
        },
        thirdProp: string
    }
}

const someVar = "SomeKey";
const config: MyConfig = {
    myObj: {
        dynamic: {
            [someVar]: {
                firstProp: 'some text',
                secondProp: 'some text',
            },
        },
        thirdProp: 'some text',
    },
};

最后,如果您具有动态功能someVar并且无法更改数据结构。您可以使用以下命令:

interface MyConfig {
    myObj: ({
        [key: string]: {
            firstProp: string
            secondProp: string
        } | string
    } & {
        thirdProp: string
    })
}
const someVar: string = "SomeKey";

const config: MyConfig = {
    myObj: {
        [someVar]: {
            firstProp: 'some text',
            secondProp: 'some text',
        },
        thirdProp: 'some text',
    },
};

// String
console.log(config.myObj.thirdProp.trim())

// Error, union string | object
console.log(config.myObj.abc.firstProp)

if (typeof config.myObj.abc === 'object') {
    // string
    console.log(config.myObj.thirdProp.trim())
    // string
    console.log(config.myObj.abc.firstProp.trim())
}

在此示例中,我们使用打字稿索引签名+指定已知属性。您还可以注意到一个奇怪的事情-索引签名具有并集object | string这是由于打字稿限制:

一旦有了字符串索引签名,所有显式成员也必须符合该索引签名。这是为了提供安全性,以便任何字符串访问都可以得到相同的结果。

参考:如何将声明的接口属性与自定义索引签名相结合

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在 TypeScript 中使用签名索引扩展动态对象

来自分类Dev

如何在Angular Translate Rails中使用动态变量?

来自分类Dev

如何在react-axios中使用动态变量?

来自分类Dev

如何在PandaSQL查询中使用动态变量(元组)?

来自分类Dev

如何在React函数中使用动态变量

来自分类Dev

如何在xilinx中使用动态变量

来自分类Dev

如何在smarty模板函数中使用动态变量

来自分类Dev

如何在Angular Translate Rails中使用动态变量?

来自分类Dev

我如何在 PHP 中使用动态变量

来自分类Dev

如何在TypeScript中导出动态变量

来自分类Dev

如何在symfony2中使用动态变量系统地过滤学说查询

来自分类Dev

如何在symfony2中使用动态变量系统地过滤学说查询

来自分类Dev

如何在Node.js中使用动态变量名

来自分类Dev

如何在 Excel VBA 中使用动态变量作为参数定义 Dim?

来自分类Dev

如何在 google-apps-script 中使用动态变量创建 QUERY 函数

来自分类Dev

如何在TypeScript中动态更新键入对象上的键值对

来自分类Dev

如何在C中编译静态和动态变量

来自分类Dev

如何使用动态变量?

来自分类Dev

如何在dplyr :: mutate()的RHS上使用动态变量?

来自分类Dev

在函数中使用“动态变量”

来自分类Dev

使用数组对象时如何在bot框架编辑器中传递动态变量值

来自分类Dev

如何在TypeScript中使用类键入数组?

来自分类Dev

如何使用jQuery创建动态变量?

来自分类Dev

如何使用jQuery创建动态变量?

来自分类Dev

PHP:如何使用动态变量

来自分类Dev

如何在Angular View中的对象字符串中传递动态变量值

来自分类Dev

如何在动态对象变量的名称中使用下划线

来自分类Dev

如何避免在Java中使用动态变量/十亿个if语句?

来自分类Dev

使用count()和factor()函数时,如何在R ggplot中使用动态声明的变量?

Related 相关文章

  1. 1

    在 TypeScript 中使用签名索引扩展动态对象

  2. 2

    如何在Angular Translate Rails中使用动态变量?

  3. 3

    如何在react-axios中使用动态变量?

  4. 4

    如何在PandaSQL查询中使用动态变量(元组)?

  5. 5

    如何在React函数中使用动态变量

  6. 6

    如何在xilinx中使用动态变量

  7. 7

    如何在smarty模板函数中使用动态变量

  8. 8

    如何在Angular Translate Rails中使用动态变量?

  9. 9

    我如何在 PHP 中使用动态变量

  10. 10

    如何在TypeScript中导出动态变量

  11. 11

    如何在symfony2中使用动态变量系统地过滤学说查询

  12. 12

    如何在symfony2中使用动态变量系统地过滤学说查询

  13. 13

    如何在Node.js中使用动态变量名

  14. 14

    如何在 Excel VBA 中使用动态变量作为参数定义 Dim?

  15. 15

    如何在 google-apps-script 中使用动态变量创建 QUERY 函数

  16. 16

    如何在TypeScript中动态更新键入对象上的键值对

  17. 17

    如何在C中编译静态和动态变量

  18. 18

    如何使用动态变量?

  19. 19

    如何在dplyr :: mutate()的RHS上使用动态变量?

  20. 20

    在函数中使用“动态变量”

  21. 21

    使用数组对象时如何在bot框架编辑器中传递动态变量值

  22. 22

    如何在TypeScript中使用类键入数组?

  23. 23

    如何使用jQuery创建动态变量?

  24. 24

    如何使用jQuery创建动态变量?

  25. 25

    PHP:如何使用动态变量

  26. 26

    如何在Angular View中的对象字符串中传递动态变量值

  27. 27

    如何在动态对象变量的名称中使用下划线

  28. 28

    如何避免在Java中使用动态变量/十亿个if语句?

  29. 29

    使用count()和factor()函数时,如何在R ggplot中使用动态声明的变量?

热门标签

归档