gpt4 book ai didi

typescript - 如何在 typescript 中将类型对象键转换为字符串类型的数组

转载 作者:行者123 更新时间:2023-12-04 11:30:48 29 4
gpt4 key购买 nike

在 typescript 中给出以下输入:

type InputObjectType = {
a: string
b: number
c: {}
}

我怎样才能得到以下类型:
type ObjectKeysArrayType = ['a', 'b', 'c']

到目前为止,我只能达到:
type AllPossibleKeys = (keyof InputObjectType)[]

这给了我 ["a" | "b" | "c"]这很接近,但不是我在这种情况下要寻找的。

我需要一个始终包含给定类型对象中所有键字符串的数组。我知道强制执行此操作的唯一方法,例如,当用户向对象添加新键时,该键也添加到数组中时,是通过这样的方式。

最佳答案

不确定您是否仍在此处寻找解决方案,但希望这会有所帮助。
如果您想要的是一种类型,该类型要求变量是仅包含等于对象键的值的字符串数组,那么您列出的应该可以工作。

type InputObjectType = {
a: string
b: number
c: {}
}

type AllPossibleKeys = (keyof InputObjectType)[]
AllPossibleKeys将是等于 ("a"|"b"|"c")[] 的类型.这看起来是您所要求的,但是我猜测您想使用它的方式有一个警告。
const fieldArray1: AllPossibleKeys = ['a', 'b', 'c']; //valid
const fieldArray2: AllPossibleKeys = ['a', 'b', 'c', 'd']; //will throw a Typescript error
const fieldArray3: AllPossibleKeys = ['a', 'b']; //this is also valid though as each member is a valid value
如果您想要一个类型中所有键的数组,则没有一种方法可以明确地做到这一点,我知道。但是,如果您能够使用接口(interface)而不是类型,那么您可以执行以下操作:
import { keys } from 'lodash';

interface InputObject = {
a: string
b: number
c: {}
}

class InputObjectStub implements InputObject {
a = null;
b = null;
c = null;
}

const fieldArray1 = keys(new InputObjectStub()); //returns ['a', 'b', 'c']
但请注意,这不会强制执行可选属性。如果您需要这样做,请将您的类定义更改为 class InputObjectStub implements Required<InputObject> {...编辑:拼写

关于typescript - 如何在 typescript 中将类型对象键转换为字符串类型的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61537761/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com