programing

동적 키를 사용하여 개체의 인터페이스를 정의하려면 어떻게 해야 합니까?

yellowcard 2023. 3. 16. 21:17
반응형

동적 키를 사용하여 개체의 인터페이스를 정의하려면 어떻게 해야 합니까?

이러한 오브젝트는 밑줄에 의해 작성됩니다._.groupBy()방법.

myObject = {
  "key" : [{Object},{Object2},{Object3}],
  "key2" : [{Object4},{Object5},{Object6}],
  ...
}

TypeScript와의 인터페이스로서 어떻게 정의하면 좋을까요?간단히 정의하기 싫습니다.myObject:Object = { ...나름의 타입이 있는 것 같아요.

오브젝트가 사전처럼 보입니다.Object어레이

interface Dic {
    [key: string]: Object[]
}

타이프 스크립트 문헌에서는 이 패턴을 일반적인 형태로 "색인 가능한 객체의 설명"이라고 종종 언급하고 있습니다.

interface Dic {
    [key: string|number]: object_type
}

또는

type Dic = {
    [key: string|number]: object_type
}

이제 전용 서비스도 있습니다.RecordTypeScript 에 입력합니다.

const myObject: Record<string, object[]> = { ... }

또, 가능한 한, 키를 입력하는 것을 검토해 주세요.

type MyKey = 'key1' | 'key2' | ...

const myObject: Record<MyKey, object[]> = { ... }
{ [x: string]: T }

그리고.

Record<string, T>

보통 당신의 모든 목표에 도움이 될 것입니다.그러나 어떤 유형의 연산 후에 첫 번째 옵션이 [x: string]과 [x: number] 둘 다 나에게 반환되는 이상한 상황에 이르렀습니다.그것은 재귀형 연산이고 Typescript는 내 재귀형이 일반적이지 않다는 오류를 발생시키기 때문에 나는 레코드를 사용할 수 없었습니다.

그래서 저는 아주 작은 레코드 코드를 연구하면서 저의 복잡한 문제를 해결할 수 있는 솔루션에 도달했습니다.

{ [P in string]: T }

편집: 보통 쓰는 모든 타입스크립트 코드에 utils.ts 파일에 다음과 같은 내용이 있습니다.

export type obj<T = unknown> = Record<string, T>

항상 Record를 사용하는 것보다 빠르고 깔끔합니다.

예:

type MyObjectType = {
  propA: obj; // An object with unknown props
  propB: obj<number>; // An object with number props
}

인터페이스에 대해서는 알 수 없습니다.다이나믹 오브젝트의 경우는, 다음과 같이 할 수 있습니다.

let memoTable: { [k: number]: number } = {};
memoTable[1]=5;
memoTable[2]=7;

Map을 사용한 솔루션을 제안합니다.아마 도움이 될 것입니다.

type TKey = 'key1' | 'key2' | 'key3';
type TValue = object[];

type TMapper = Map<TKey, TValue>; // But also you can use Record instead of Map

개체를 유형으로 사용하는 대신 레코드 사용

interface myObjInterface {
  [key: string]: Record<string, any>[]
}

언급URL : https://stackoverflow.com/questions/39256682/how-to-define-an-interface-for-objects-with-dynamic-keys

반응형