ts找不到名称...明确指定typeRoots

时间:2018-09-09 08:49:21

标签: typescript types

我正在为TypeScript 3.0.3项目开发monorepo结构,简化后的结构看起来像这样

_types/
  models.ts
package.json
tsconfig.json
packages/
  app/
    tsconfig.json
    package.json
  server/
    tsconfig.json
    package.json

因此,我将全局接口放在_types文件夹中,models.ts的示例如下所示

interface ICharacterEssentials {
  username: string
  gender: 'MALE' | 'FEMALE'
  skinTone: 'DARK' | 'LIGHT'
  race: 'HUMAN' | 'ORC' | 'ELF' | 'DWARF'
}

这个接口不是在我的packages/server/index.ts文件中使用的,但是我得到了错误

  

[ts]找不到名称'ICharacterEssentials'。

我最初的直觉是,由于接口文件位于/packages/server文件夹之外,因此它没有看到它。因此,我进入了我的monorepos根目录tsconfig.json,并在compilerOptions

中添加了这一点。
"typeRoots": [
  "./_types/*",
  "./node_modules"
]

我的packages/server/tsconfig.json文件是这样扩展的

{
  "extends": "../../tsconfig.json",
  "compilerOptions": {
    "noImplicitReturns": true,
    "outDir": "./dist"
  },
  "exclude": [
   "./dist"
  ]
}

我认为这将使我的ICharacterEssentials接口在服务器包中可见,但是仍然出现相同的错误。有关如何解决此问题的任何建议? (同时还保留了我的节点模块的类型定义)

1 个答案:

答案 0 :(得分:1)

您的主要问题是您没有导出界面。试试:

export interface ICharacterEssentials {
  username: string
  gender: 'MALE' | 'FEMALE'
  skinTone: 'DARK' | 'LIGHT'
  race: 'HUMAN' | 'ORC' | 'ELF' | 'DWARF'
}

您说过在tsconfig.json上进行此配置的原因...

"typeRoots": [
  "./_types/*",
  "./node_modules"
]

...试图使根类型在包中可见。这是不必要的。如果您未指定,TypeScript会在任何地方自动查找类型。但是,您可能想要这样做的一个原因是,防止monorepo的根访问每个单独程序包中定义的类型。这取决于你。

对于类型解析,不必在每个包中扩展基本tsconfig.json。我会走得更远,问您是否要对monorepo中的每个软件包使用单独的tsconfig.json。我正在处理大型TypeScript monorepo,但每个包都没有单独的tsconfig.json

回到您的问题。有趣的是,在我的测试项目中,Visual Studio Code并未建议在嵌套文件夹内自动导入外部ICharacterEssentials,但是WebStorm确实可以,并且无论使用什么编辑器,它都可以正常工作。

enter image description here