在打字稿中给出以下输入:
type InputObjectType = {
a: string
b: number
c: {}
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能得到以下类型:
type ObjectKeysArrayType = ['a', 'b', 'c']
Run Code Online (Sandbox Code Playgroud)
到目前为止我只能到达:
type AllPossibleKeys = (keyof InputObjectType)[]
Run Code Online (Sandbox Code Playgroud)
这给了我["a" | "b" | "c"]这很接近,但不是我在这种情况下寻找的。
我需要一个始终包含给定类型对象中的所有键字符串的数组。我知道强制执行此操作的唯一方法,例如,当用户向对象添加新键时,该键也添加到数组中,就是通过类似这样的方法。
不确定您是否仍在此处寻找解决方案,但希望这会有所帮助。
如果您想要的类型要求变量是仅包含等于对象键的值的字符串数组,那么您列出的应该有效。
type InputObjectType = {
a: string
b: number
c: {}
}
type AllPossibleKeys = (keyof InputObjectType)[]
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
如果您想要一个类型中所有键的数组,据我所知,没有办法明确执行此操作。但是,如果您能够使用接口而不是类型,那么您可以执行以下操作:
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']
Run Code Online (Sandbox Code Playgroud)
但请注意,这不会强制执行可选属性。如果您需要这样做,请将您的类定义更改为class InputObjectStub implements Required<InputObject> {...
编辑:拼写
chi*_*iya -1
尝试这个
const object1 = {
a: 'somestring',
b: 42,
c: false
};
console.log(Object.keys(object1));
output: Array ["a", "b", "c"]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
14181 次 |
| 最近记录: |