在 Heroku 上执行 ts 文件时如何声明打字稿类型?

How to declare typescript types when executing a ts file on Heroku?

我有一个使用 ts-node:

在本地执行的打字稿文件
"scripts": {
  "commands": "ts-node --files deploy-commands.ts",
},

当我 运行 使用 Heroku cli 在 Heroku 部署的应用程序上执行命令时:

heroku run npm run commands

我收到打字稿错误:

ts-node --files deploy-commands.ts

/app/node_modules/ts-node/src/index.ts:820
return new TSError(diagnosticText, diagnosticCodes);
               ^
TSError: ⨯ Unable to compile TypeScript:
src/commands/picks.ts:3:26 - error TS7016: Could not find a declaration file for module 'luxon'. '/app/node_modules/luxon/build/node/luxon.js' implicitly has an 'any' type.
Try `npm i --save-dev @types/luxon` if it exists or add a new declaration (.d.ts) file containing `declare module 'luxon';`

3 import { Settings } from 'luxon'
                               ~~~~~~~
at createTSError (/app/node_modules/ts-node/src/index.ts:820:12)

我的 package.json 包含了 devDependencies 中的类型(我知道 Heroku 去掉了这些)

"devDependencies": {
  "@types/luxon": "^2.3.1",
},

所以我添加了 types/index.d.ts 和:

declare module 'luxon'

但还是报错

眼前的问题是 @types/luxon 被声明为开发依赖项,但是 Heroku strips devDependencies after building your application slug by default。它们在 运行 时间不可用。

您可以 disable dev dependency pruning 或将该依赖项移动到您的 dependencies,但更好的选择是在 运行 时不 运行 TypeScript。

相反,在您的 build 脚本中将其编译为 JavaScript,然后 运行 JavaScript,例如使用类似的东西:

"scripts": {
  "build": "tsc",
  "commands": "node deploy-commands.js",
},