typescript - 将 JSON 作为类型导入

标签 typescript

如何定义导入 json 的类型?例如

{
  "things": "foo"
}
interface Data {
  things: String,
  another?: String
}
import data from './data.json' // Should have type Data
console.log(data.things)
console.log(data.another) // Should be allowed but undefined
resolveJsonModule选项将自动为导入的 JSON 生成类型,但它不完整,因为 JSON 可能不包含数据的所有可能字段。
我如何自己定义类型?

最佳答案

我可以在这里想到3种主要方式:

  • 您可以使用带有类型断言的require,如下所示:

  • const data: Data = require('./data.json')
    
  • 您可以继续 import ,但使用额外的变量(键入),如下所示:

  • import untypedData from './data.json'
    
    const data: Data = untypedData
    
  • 您可以添加一个模块类型文件并将其添加到您的 typeRootstsconfig.json 部分,如下所示:

  • // File data.d.ts
    declare module "data.json" {
      things: String,
      another?: String
    }
    
    // File tsconfig.json
    {
      ...
      "typeRoots": [
        "/*path to data.d.ts*/"
      ]
    }
    
    这将让您 import 以及正确输入导入的项目
    也可以看看
    Importing json file in TypeScript

    关于typescript - 将 JSON 作为类型导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65775338/

    相关文章:

    angular - 找不到路径 Angular 控制

    javascript - 注入(inject) ComponentFactoryResolver 失败

    Angular Mat对话框单元测试: This. dialogref.updatesize不是函数

    javascript - 类型 'querySelector' 上不存在属性 'Node'。在 typescript 中

    ios - Base64 图像损坏 ios

    javascript - 将 RequireJS 与非 AMD JavaScript 文件一起使用

    Angular 6 子路由不起作用

    javascript - StencilJS - TypeScript - 导出枚举时为 "Cannot find name ..."

    javascript - 在 Monaco Editor 中滚动到一行

    通过 npm 链接的 Angular 共享模块