【问题标题】:Import JSON file in TypeScript declaration (*.d.ts files)在 TypeScript 声明中导入 JSON 文件(*.d.ts 文件)
【发布时间】:2020-11-22 23:39:57
【问题描述】:

我正在编写一个声明文件,它应该声明一个全局类型并严格限制于特定的字符串短语列表。
这些字符串短语实际上是位于 JSON 文件中的对象中的属性键的一部分。

两个问题:

  1. 是否可以将 JSON 文件导入声明文件并使用基本函数(如 Object.keysArray.map)对其进行处理?
  2. 然而,我想知道,是否甚至可以使用 JS 字符串数组来定义 TS 中的类型?

让我给你一个代码示例。

假设我们有以下名为 data.json 的 JSON 文件:

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

现在,我要创建以下声明文件global.d.ts

import data from './data.json';

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

基本上,我需要像这样定义类型(随着 JSON 文件的变化动态地):

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

任何帮助或至少是指导将不胜感激。

【问题讨论】:

    标签: json typescript dynamic types import


    【解决方案1】:

    您可以让 typescript 从 json 文件中的数据推断类型。

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

    生成的d.ts 文件如下所示:

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

    据我所知,没有办法在打字稿中操作字符串文字(即删除#)。

    查看那些 github 问题:

    【讨论】:

      猜你喜欢
      • 2020-12-24
      • 1970-01-01
      • 1970-01-01
      • 2015-11-22
      • 2021-02-18
      • 2017-05-31
      • 1970-01-01
      • 2018-10-04
      相关资源
      最近更新 更多