首页 > 解决方案 > TypeScript 定义文件必须位于包的根目录吗?

问题描述

假设我有一个包含两个文件的 TypeScript 包,这两个文件(无论出于何种原因)至少在技术上彼此无关,而是独立的。此外,没有index.ts文件或类似的东西可以作为统一的入口点,而是这个包中的文件是单独导入的。

所以,我们有一个这样的文件夹结构:

src/
  a.ts
  b.ts
dist/
  a.js
  a.d.ts
  b.js
  b.d.ts
package.json

由于显而易见的原因,我不能将单个.d.ts文件放入types. package.json现在,如果我导入这样的文件:

import a from 'somepackage/a';

IDE 是否检测到正确的.d.ts文件,还是我需要以不同的方式做任何事情?这是官方的方式吗,还是我需要注意什么,或者我必须做些什么才能使事情正常进行?

标签: javascripttypescript

解决方案


如果您将类型与您的包捆绑在一起,您应该使用“types”属性在您的 package.json 文件中引用您的类型定义:

{
  "name": "whatever-package",
  ...
  "main": "./dist/main.js"
  "types": "./dist/typings.d.ts",
  ...
}

不幸的是,“类型”仅支持一个字符串值,因此您只能传递一个应该包含捆绑类型定义的路径。这是因为它与您的主条目文件对应(也仅支持 1 个路径)。

编辑:要解决此限制,您的类型文件(以及您的主条目文件)可能只是一个导出具体定义的包装器,如下所示:

打字.d.ts

export { SomeObject } from './path/SomeObject';
export { SomeOtherObject } from './some/other/path/SomeOtherObject';

在这种情况下 SomeObject.d.ts 和 SomeOtherObject.d.ts 应该存在于相应的路径上。


推荐阅读