我有一个这样的Object,它是由下划线的_.groupBy()方法创建的.
myObject = {
"key" : [{Object},{Object2},{Object3}],
"key2" : [{Object4},{Object5},{Object6}],
...
}
Run Code Online (Sandbox Code Playgroud)
我如何将其定义为TypeScript的接口?我不想简单地将其定义为myObject:Object = { ...,而是拥有自己的类型.
Bru*_*der 94
您的对象看起来像Object数组字典
interface Dic {
[key: string]: Object[]
}
Run Code Online (Sandbox Code Playgroud)
Mik*_*zic 26
现在RecordTypeScript中有一个专用类型:
const myObject: Record<string, object[]> = { ... }
Run Code Online (Sandbox Code Playgroud)
另外,请考虑尽可能键入密钥:
type MyKey = 'key1' | 'key2' | ...
const myObject: Record<MyKey, object[]> = { ... }
Run Code Online (Sandbox Code Playgroud)
不知道接口,对于动态对象我们可以这样:
let memoTable: { [k: number]: number } = {};
memoTable[1]=5;
memoTable[2]=7;
Run Code Online (Sandbox Code Playgroud)
{ [x: string]: T }
Run Code Online (Sandbox Code Playgroud)
和
Record<string, T>
Run Code Online (Sandbox Code Playgroud)
通常会为您的所有目标服务。然而,我遇到了一个奇怪的问题,在一些类型操作之后,第一个选项同时返回给我 [x: string] 和 [x: number],我无法使用 Record,因为它是一个递归type 操作和 Typescript 抛出一个错误,说我的递归类型不是通用的。
因此,通过研究非常小的 Record 代码,我找到了解决我复杂问题的解决方案:
{ [P in string]: T }
Run Code Online (Sandbox Code Playgroud)
编辑:我通常在我编写的每个 Typescript 代码中都有这个,在 utils.ts 文件中:
export type obj<T = unknown> = Record<string, T>
Run Code Online (Sandbox Code Playgroud)
比一直使用 Record 更快、更干净。
例如:
type MyObjectType = {
propA: obj; // An object with unknown props
propB: obj<number>; // An object with number props
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
26796 次 |
| 最近记录: |