打字稿:调试失败。错误表达式:传递给“ts.resolveTypeReferenceDirective”的非字符串值

cri*_*ari 59 javascript node.js npm typescript

我有一个npm不久前构建的命令行应用程序,它运行良好。现在我已经更新了它,并且由于这段时间内打字稿版本的变化,当我想运行这个包时,我收到一个错误,其中显示:

Debug Failure. False expression: Non-string value passed to `ts.resolveTypeReferenceDirective`, likely by a wrapping package working with an outdated `resolveTypeReferenceDirectives` signature. This is probably not a problem in TS itself.
Run Code Online (Sandbox Code Playgroud)

这是package.json文件:

{
  "name": "initialiseur",
  "version": "4.0.4",
  "main": "src index.ts",
  "author": "@crispengari",
  "license": "MIT",
  "bin": "src/index.ts",
  "description": "THIS IS A BOILER PLATE THAT INITIALIZE A NODE EXPRESS BACKEND FOR TYPESCRIPT AND JAVASCRIPT",
  "scripts": {
    "watch": "tsc -w",
    "start": "ts-node src/index.ts",
    "dev": "nodemon dist/index.ts",
    "start:fast": "tsnd --respawn src/index.ts"
  },
  "dependencies": {
    "@types/inquirer": "^7.3.3",
    "@types/node": "^17.0.42",
    "@types/npm": "^7.19.0",
    "chalk": "^4.1.2",
    "cors": "^2.8.5",
    "cross-fetch": "^3.1.5",
    "dotenv": "^10.0.0",
    "inquirer": "^8.1.2",
    "node-fetch": "^3.2.6",
    "octokit": "^1.7.2",
    "ts-node": "^10.8.1",
    "typescript": "^4.6.5"
  },
  "devDependencies": {
    "@types/node-fetch": "^2.6.1",
    "nodemon": "^2.0.12",
    "ts-node-dev": "^2.0.0"
  },
  "bugs": {
    "url": "https://github.com/CrispenGari/initialiseur/issues"
  },
  "homepage": "https://github.com/CrispenGari/initialiseur#readme",
  "keywords": [
    "node.ts",
    "node.js",
    "typescript",
    "ts",
    "nodejs-backend",
    "javascript",
    "js",
    "express",
    "backend"
  ]
}
Run Code Online (Sandbox Code Playgroud)

当我通过运行在本地测试它时:

npm start

# or 
yarn start

Run Code Online (Sandbox Code Playgroud)

一切工作正常,但将其发布到 npm 启动后,我运行以下命令:

npx initialiseur
Run Code Online (Sandbox Code Playgroud)

然后我从命令行收到错误。整个错误如下:

C:\Users\crisp\AppData\Roaming\npm\node_modules\initialiseur\node_modules\typescript\lib\typescript.js:42536
        ts.Debug.assert(typeof typeReferenceDirectiveName === "string", "Non-string value passed to `ts.resolveTypeReferenceDirective`, likely by a wrapping package working with an outdated `resolveTypeReferenceDirectives` signature. This is probably not a problem in TS itself.");
                 ^
Error: Debug Failure. False expression: Non-string value passed to `ts.resolveTypeReferenceDirective`, likely by a wrapping package working with an outdated `resolveTypeReferenceDirectives` signature. This is probably not a problem in TS itself.
    at Object.resolveTypeReferenceDirective (C:\Users\crisp\AppData\Roaming\npm\node_modules\initialiseur\node_modules\typescript\lib\typescript.js:42536:18)
    at C:\Users\crisp\AppData\Roaming\npm\node_modules\ts-node\src\resolver-functions.ts:131:51
    at Array.map (<anonymous>)
    at Object.resolveTypeReferenceDirectives (C:\Users\crisp\AppData\Roaming\npm\node_modules\ts-node\src\resolver-functions.ts:130:31)
    at actualResolveTypeReferenceDirectiveNamesWorker (C:\Users\crisp\AppData\Roaming\npm\node_modules\initialiseur\node_modules\typescript\lib\typescript.js:116673:163)
    at resolveTypeReferenceDirectiveNamesWorker (C:\Users\crisp\AppData\Roaming\npm\node_modules\initialiseur\node_modules\typescript\lib\typescript.js:116973:26)
    at processTypeReferenceDirectives (C:\Users\crisp\AppData\Roaming\npm\node_modules\initialiseur\node_modules\typescript\lib\typescript.js:118455:31)
    at findSourceFileWorker (C:\Users\crisp\AppData\Roaming\npm\node_modules\initialiseur\node_modules\typescript\lib\typescript.js:118340:21)
    at findSourceFile (C:\Users\crisp\AppData\Roaming\npm\node_modules\initialiseur\node_modules\typescript\lib\typescript.js:118195:26)
    at processImportedModules (C:\Users\crisp\AppData\Roaming\npm\node_modules\initialiseur\node_modules\typescript\lib\typescript.js:118601:25)
Run Code Online (Sandbox Code Playgroud)

从上面的错误我可以看出问题可能来自typescript,我尝试更改打字稿的版本,但仍然无法正常工作。在我的src/index.ts看来如下:


#!/usr/bin/env ts-node
import path from "path";
import inquirer from "inquirer";
import { writeFile, readFile } from "fs/promises";

....


Run Code Online (Sandbox Code Playgroud)

Nil*_*rdt 41

跑步npm install -g ts-node@latest为我解决了这个问题。我需要更新我的全局安装ts-node版本。

  • 或者对于那些使用该包装程序包的人来说,“npm i --save-dev ts-node-dev@latest”。 (3认同)

Fer*_*ojo 31

重申之前对纱线用户的回答:

yarn add -D ts-node@latest为我解决了。这些是我现在的版本:

"ts-node": "^10.9.1",
"typescript": "^4.7.4"
Run Code Online (Sandbox Code Playgroud)

最重要的答案可能不应该建议降级。


编辑

如果您仍然遇到问题,请尝试删除node_modules文件夹并通过运行重新安装yarn

如果仍然不起作用,您可能需要将这些版本添加到resolutions中的字段中package.json,然后运行yarn install --force​​。

{
  "resolutions": {
    "ts-node": "^10.9.1",
    "typescript": "^4.7.4"
  }
}
Run Code Online (Sandbox Code Playgroud)

不过,我认为这有点临时措施,我不建议永远保留这些决议。


Pau*_*eit 19

和几天的情况一样。

将 ts-node 恢复到 v10.6.0 可以解决这个问题。

  • 距离这个答案已经过去几周了,现在将这两个包更新到最新版本可能比恢复到旧包(“npm i typescript@latest ts-node@latest”)更好,但要采取最适合您的代码库的方法。归功于下面的答案。 (4认同)

小智 15

它正在 Typescript 4.7 中实现。我将打字稿降低到 4.6.4,错误消失了


Die*_*lva 13


bbb*_*oat 5

记住区分全局 ts-node 和包 ts-node;您必须使用 npx 来运行本地 ts-node

> npx ts-node ...
Run Code Online (Sandbox Code Playgroud)

不管怎样,这是我在反复 rm -rf node_nodules 和yarn add ts-node@latest 30分钟后终于找到的。