将 JSON 作为类型导入

Red*_*ter 25 typescript

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

{
  "things": "foo"
}
Run Code Online (Sandbox Code Playgroud)
interface Data {
  things: String,
  another?: String
}
Run Code Online (Sandbox Code Playgroud)
import data from './data.json' // Should have type Data
console.log(data.things)
console.log(data.another) // Should be allowed but undefined
Run Code Online (Sandbox Code Playgroud)

resolveJsonModule选项将自动为导入的 JSON 生成类型,但它是不完整的,因为 JSON 可能不包含数据的所有可能字段。

我自己如何定义类型?

g2j*_*ose 22

我在这里可以想到3个主要方法:

  1. 您可以将 arequire与类型断言一起使用,如下所示:
const data: Data = require('./data.json')
Run Code Online (Sandbox Code Playgroud)
  1. 您可以继续import,但使用附加变量(类型化),如下所示:
import untypedData from './data.json'

const data: Data = untypedData
Run Code Online (Sandbox Code Playgroud)
  1. 您可以添加一个模块类型文件并将其添加到typeRoots您的部分,tsconfig.json如下所示:
// File data.d.ts
declare module "data.json" {
  things: String,
  another?: String
}
Run Code Online (Sandbox Code Playgroud)
// File tsconfig.json
{
  ...
  "typeRoots": [
    "/*path to data.d.ts*/"
  ]
}
Run Code Online (Sandbox Code Playgroud)

这将使您import能够正确输入导入的项目

另请参阅 在 TypeScript 中导入 json 文件