在Typescript时,有时想要把所有类型放到一起,不用再分散在每一个文件中,该怎么做呢?

溯源

经过搜索,在知乎中找到了答案:
综合这两个回答:

  1. 在项目根目录创建typings目录
  2. 在typings中添加index.d.ts,在其中定义你要的类型

interface MyType { foo: string; bar: string[]; }
3. 修改tsconfig.json,添加如下行
{ “compilerOptions”: { “typeRoots”: [“./node_modules/@types/“, “./typings”], } }
4. 重新编编译ts

作者:COIN
链接:https://www.zhihu.com/question/350961609/answer/859154920
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

已经找到方法了,在这里解释一下需求,1.声明全局类型。2.全局类型中引用其它d.ts中的类型。
https://stackoverflow.com/questions/39040108/import-class-in-definition-file-d-tsstackoverflow.com/questions/39040108/import-class-in-definition-file-d-ts
使用import()语法

作者:stan4515
链接:https://www.zhihu.com/question/350961609/answer/859314846
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

具体做法为:

  1. 修改 tsconfig.json ```shell { “compilerOptions”: { “target”: “ES6”, / Set the JavaScript language version for emitted JavaScript and include compatible library declarations. / “module”: “commonjs”, / Specify what module code is generated. / // 修改这里,填入将包含全局类型xx.d.ts文件的目录 “typeRoots”: [“./types”], / Specify multiple folders that act like ‘./node_modules/@types’. / “outDir”: “./dist”, / Specify an output folder for all emitted files. / “esModuleInterop”: true, / Emit additional JavaScript to ease support for importing CommonJS modules. This enables ‘allowSyntheticDefaultImports’ for type compatibility. / “forceConsistentCasingInFileNames”: true, / Ensure that casing is correct in imports. / “strict”: true, / Enable all strict type-checking options. / “skipLibCheck”: true / Skip type checking all .d.ts files. / }, // 这里也是,将全局类型目录填入 “include”: [“./src”, “./types”] }
  1. 2. 在目录里面声明类型即可,这样项目所有ts文件都能访问了
  2. 3. 如果遇到enum枚举类型,则可以使用import()导入类型
  3. enum类型比较特殊,它既是类型,也是一种数据结构。
  4. ```typescript
  5. export enum Foo {
  6. ONE,
  7. TWO,
  8. THREE
  9. }
  1. interface Haha {
  2. foo: import('./index').Foo // 这样就会把类型导入
  3. }

示例项目:

https://github.com/liulinboyi/interface-oriented-programming