본문 바로가기

개발하자

TypeScript 선언(*.d.ts 파일)으로 JSON 파일 가져오기

반응형

TypeScript 선언(*.d.ts 파일)으로 JSON 파일 가져오기

나는 글로벌 유형을 선언하고 특정 문자열 구문 목록에 엄격한 선언 파일을 작성하고 있다. 이러한 문자열 구문은 실제로 JSON 파일에 있는 개체의 속성 키의 일부입니다.

두 가지 질문:

  1. JSON 파일을 선언 파일로 가져와서 와 같은 기본 기능을 사용하여 처리할 수 있습니까?
  2. 하지만, 나는 TS에서 유형을 정의하기 위해 문자열의 JS 배열을 사용하는 것이 가능한지 궁금하다?

코드의 예를 하나 들어보겠습니다.

다음과 같은 이름의 JSON 파일이 있다고 가정해 보겠습니다:

{
  "someList": {
    "#key1": {"a": 1, "b": 2},
    "#key2": "some value",
    "#key3": 1234
  }
}

이제 다음 선언 파일을 생성합니다:

import data from './data.json';

declare global {
  type AllowedKeys = Object(data.someList).map(key => key.substr(1));
}

기본적으로 다음과 같이 정의할 유형(JSON 파일이 동적으로 변경됨)이 필요합니다:

type AllowedKeys = "key1" | "key2" | "key3";

어떤 도움이나 최소한의 안내라도 감사할 것이다.




: 이제 템플릿 문자열 리터럴을 사용하여 다음과 같이 주어진 문자에서 시작하는 하위 문자열을 유추할 수 있습니다:

import data from "./data.json";
export type AllowedKeys = keyof typeof data["someList"] extends `#${infer K extends string}` ? K : never;
// This is equivalent to
// export type AllowedKeys = "key1" | "key2" | "key3"

당신은 json-file의 데이터에서 유형을 추론하도록 타이프스크립트를 만들 수 있다.

import data from "./data.json";


export type AllowedKeys = keyof typeof data["someList"];
// This is equivalent to
// export type AllowedKeys = "#key1" | "#key2" | "#key3"

결과 파일은 다음과 같습니다:

import data from "./data.json";
export declare type AllowedKeys = keyof typeof data["someList"];

내가 알기로는 타이프스크립트에서 문자열 리터럴을 조작할 방법이 없다(즉, 를 제거한다).

다음 Github 문제를 참조하십시오:


반응형