programing

임의 키를 사용하여 입력한 개체를 선언하는 방법은 무엇입니까?

abcjava 2023. 6. 15. 21:31
반응형

임의 키를 사용하여 입력한 개체를 선언하는 방법은 무엇입니까?

인어.d.ts파일, 객체를 문자열 키를 가진 것으로 정의하려면 어떻게 해야 합니까?T가치관?

예.

declare var Game: {
    creeps: Object<string, Creep>; // not sure what syntax to use here
};

declare class Creep {
   // definition...
}

Game.creeps이다.object하지만 어떤 속성/키를 가질지는 모릅니다. (실행 시 정의됩니다. 사전처럼 사용하고 있습니다.) 하지만 모든 값이Creeps.

IDE에 "Object is not generic"이라고 표시되어 있어서 구문이 올바르지 않은 것 같습니다.

인덱스 서명 사용:

declare var Game: {
    creeps: {[key:string]: Creep}
};

basrat의 대답은 여전히 잘 작동하지만 Typescript 2.1 이상에는 원래 작동할 것이라고 생각했던 것과 더 유사하게 보이는 유형이 있습니다.

declare var Game: {
    creeps: Record<string, Creep>
};

실제적인 차이는 없지만, Typescript는 어떤 경우에도Ka를 중히 여기다Record<K, V>상응하는 것을 생산할 수 있습니다.V값. 예:

type Creep = {
    id: number;
}

function printIt(c: Creep) {
    console.log(c.id);
}

let game: Record<string, Creep> = {"test": {id: 0}};
printIt(thing["quest"]);

컴파일됨 - 을 사용하더라도strictNullChecks물론 런타임 오류가 발생할 수 있습니다.따라서 인덱스 액세스를 직접 확인하거나 사용해야 합니다.--noUncheckedIndexedAccess@mpen이 제안한 대로 플래그.

언급URL : https://stackoverflow.com/questions/36590284/how-to-declare-a-typed-object-with-arbitrary-keys

반응형