打字稿没有从模块的 index.d.ts 中找到类型

Joh*_*ohn 6 typescript

使用 Typescript 4.2.3,我正在从 Typescript 构建一个包。当我安装包时,它在node-moduleshas.js.d.tsfiles 中的条目正如预期的那样。

??? dist
?   ??? index.d.ts
?   ??? index.js
?   ??? index.test.d.ts
?   ??? index.test.js
??? package.json
Run Code Online (Sandbox Code Playgroud)

以下是内容package.json

{
  "name": "postgres-base-class",
  "version": "0.1.3",
  "description": "Abstract class to handle an Postgres Client connection, provding execSql method to extending classes",
  "main": "dist/index.js",
  "types": "dist/index.d.ts",
  "devDependencies": {
<omitted>
  },
  "dependencies": {
    "pg": "^8.5.1"
  },
  "scripts": {
    "test": "jest",
    "prepack": "npm run clean && npm test && tsc --declaration",
    "clean": "tsc --build --clean"
  },
  "files": [
    "dist/"
  ],
  "author": "John Bito",
  "license": "UNLICENSED",
  "private": true
}
Run Code Online (Sandbox Code Playgroud)

当我尝试扩展包中定义的类时,受保护方法的参数和返回类型any在VSCode中显示,并且tsc没有检测到错误参数。相反,它似乎将包视为没有类型的 JS 包。

我该怎么做才能使tsc安装包的位置可以使用包中的类型?

以下是内容index.d.ts

??? dist
?   ??? index.d.ts
?   ??? index.js
?   ??? index.test.d.ts
?   ??? index.test.js
??? package.json
Run Code Online (Sandbox Code Playgroud)

execSql导入包的方法的类型似乎是(根据VSCode):

execSql(query: any): Promise<any>
Run Code Online (Sandbox Code Playgroud)

也就是说的内容相匹配index.js所产生tsc(摘录):

{
  "name": "postgres-base-class",
  "version": "0.1.3",
  "description": "Abstract class to handle an Postgres Client connection, provding execSql method to extending classes",
  "main": "dist/index.js",
  "types": "dist/index.d.ts",
  "devDependencies": {
<omitted>
  },
  "dependencies": {
    "pg": "^8.5.1"
  },
  "scripts": {
    "test": "jest",
    "prepack": "npm run clean && npm test && tsc --declaration",
    "clean": "tsc --build --clean"
  },
  "files": [
    "dist/"
  ],
  "author": "John Bito",
  "license": "UNLICENSED",
  "private": true
}
Run Code Online (Sandbox Code Playgroud)

小智 1

据我所见,依赖项pg的依赖项postgres-base-classpg主项目的依赖项所掩盖。

  • 如果您的主项目pg显式导入,请添加@types/pg到您的 main 的devDependencies.
  • 如果没有,请确保pg不在主项目的依赖项中(以避免它遮蔽子项目的依赖项类型),并添加@types/pg到您的postgres-base-class[dev] 依赖项

工作自yarn add ../relative