根 index.d.ts 内子文件夹的类型

Seb*_*ald 3 typescript definitelytyped material-ui

我们创建了类型material-ui@next并希望将它们与库一起发布,我们在上一个测试版中做到了这一点。

这是index.d.ts.

但是这些类型在当前的形式中是不可用的。在开发中,它们在本地使用并且运行良好,但是当使用库 TypeScript 传送文件时,它们似乎使用了不同的发现策略。

declare 'material-ui/Button/Button'不会找到所有引用子文件夹(例如)的类型都是 TypeScript。导入组件时会出现错误:

[ts]
Could not find a declaration file for module 'material-ui/Button/Button'. '<project path>/node_modules/material-ui/Button/Button.js' implicitly has an 'any' type.
  Try `npm install @types/material-ui/Button/Button` if it exists or add a new declaration (.d.ts) file containing `declare module 'material-ui/Button/Button';`
Run Code Online (Sandbox Code Playgroud)

npm_modules文件夹内使用时,TypeScript 是否不接受声明其他导入?因为如上所述,在本地使用它们甚至将它们移动到@types/material-ui将使它们工作。

此外,TypeScript 似乎找到了index.d.ts, 因为从“根”导入有效 ( import { Button} from 'material-ui')。

Seb*_*ald 6

因此,事实证明 TypeScript 处理内部的类型node_modules/@types/*node_modules/*略有不同:

输入@types是所谓的增强模块。它们是全局的,其中的所有内容都将在您的项目代码中。这就是访问子模块声明(如material-ui/Button/Button)起作用的原因。

常规 npm 模块被视为(常规)模块。因此,如果您导入子文件夹,该子文件夹必须包含类型。TypeScript 不会进入模块的根目录并检查那里的类型是否有增强模块。

这意味着您 (a) 必须将您的类型发布到DefinitelyTyped.d.ts为每个子文件夹和文件创建文件。

你可以在这里找到更长的解释:https : //github.com/Microsoft/TypeScript/issues/17945

  • 真的希望能有更多的记录。通常,开发人员在必须进行故障排除时会摆弄打字机,在这方面缺乏文档会导致打字稿被解雇 (2认同)