首页 > 解决方案 > 无法运行简单的 Typescript 文件

问题描述

我开始了这个 Typescript课程,设置所有内容的步骤非常简单。我创建了一个新目录,运行npm init,然后npm install --save-dev ts-node typescript. 我向我的 package.json 添加了一个脚本,如下所示,就像课程建议的那样

PACKAGE.JSON:
{
  "name": "part9",
  "version": "1.0.0",
  "description": "",
  "main": "index.js",
  "scripts": {
    "ts-node": "ts-node"
  },
  "author": "",
  "license": "ISC",
  "devDependencies": {
    "ts-node": "^10.2.1",
    "typescript": "^4.3.5"
  }
}

并创建了一个multiplier.ts文件,如下所示:

const multiplicator = (a, b, printText) => {
  console.log(printText, a * b);
};

multiplicator(2, 4, "Multiplied numbers 2 and 4, the result is:");

在这一点上,课程说要运行脚本npm run ts-node -- multiplier.ts,但是当我这样做时,我的终端会出现错误。我花了一个小时安装了其他 stackoverflow 用户建议的几个软件包,但没有任何效果,而且错误消息并不清楚初学者有什么问题。有人能帮我吗?这是下面的错误。如果这有所作为,我正在使用 Windows 10。

> part9@1.0.0 ts-node C:\Users\user\Documents\Documents\Projects\_Courses\FullStackOpen\part9
> ts-node "multiplier.ts"

C:\Users\user\Documents\Documents\Projects\_Courses\FullStackOpen\part9\node_modules\ts-node\src\index.ts:692
    return new TSError(diagnosticText, diagnosticCodes);
           ^
TSError: ⨯ Unable to compile TypeScript:
multiplier.ts:1:24 - error TS7006: Parameter 'a' implicitly has an 'any' type.

1 const multiplicator = (a, b, printText) => {
                         ~
multiplier.ts:1:27 - error TS7006: Parameter 'b' implicitly has an 'any' type.

1 const multiplicator = (a, b, printText) => {
                            ~
multiplier.ts:1:30 - error TS7006: Parameter 'printText' implicitly has an 'any' type.

1 const multiplicator = (a, b, printText) => {
                               ~~~~~~~~~
multiplier.ts:2:3 - error TS2584: Cannot find name 'console'. Do you need to change your target library? Try 
changing the 'lib' compiler option to include 'dom'.

2   console.log(printText, a * b);
    ~~~~~~~

    at createTSError (C:\Users\user\Documents\Documents\Projects\_Courses\FullStackOpen\part9\node_modules\ts-node\src\index.ts:692:12)
    at reportTSError (C:\Users\user\Documents\Documents\Projects\_Courses\FullStackOpen\part9\node_modules\ts-node\src\index.ts:696:19)
    at getOutput (C:\Users\user\Documents\Documents\Projects\_Courses\FullStackOpen\part9\node_modules\ts-node\src\index.ts:883:36)
    at Object.compile (C:\Users\user\Documents\Documents\Projects\_Courses\FullStackOpen\part9\node_modules\ts-node\src\index.ts:1185:30)
    at Module.m._compile (C:\Users\user\Documents\Documents\Projects\_Courses\FullStackOpen\part9\node_modules\ts-node\src\index.ts:1309:30)
    at Module._extensions..js (internal/modules/cjs/loader.js:1101:10)
    at Object.require.extensions.<computed> [as .ts] (C:\Users\user\Documents\Documents\Projects\_Courses\FullStackOpen\part9\node_modules\ts-node\src\index.ts:1313:12)
    at Module.load (internal/modules/cjs/loader.js:937:32)
    at Function.Module._load (internal/modules/cjs/loader.js:778:12)
    at Function.executeUserEntryPoint [as runMain] (internal/modules/run_main.js:76:12) {
  diagnosticText: "\x1B[96mmultiplier.ts\x1B[0m:\x1B[93m1\x1B[0m:\x1B[93m24\x1B[0m - \x1B[91merror\x1B[0m\x1B[90m TS7006: \x1B[0mParameter 'a' implicitly has an 'any' type.\r\n" +
    '\r\n' +
    '\x1B[7m1\x1B[0m const multiplicator = (a, b, printText) => {\r\n' +
    '\x1B[7m \x1B[0m \x1B[91m                       ~\x1B[0m\r\n' +
    "\x1B[96mmultiplier.ts\x1B[0m:\x1B[93m1\x1B[0m:\x1B[93m27\x1B[0m - \x1B[91merror\x1B[0m\x1B[90m TS7006: \x1B[0mParameter 'b' implicitly has an 'any' type.\r\n" +
    '\r\n' +
    '\x1B[7m1\x1B[0m const multiplicator = (a, b, printText) => {\r\n' +
    '\x1B[7m \x1B[0m \x1B[91m                          ~\x1B[0m\r\n' +
    "\x1B[96mmultiplier.ts\x1B[0m:\x1B[93m1\x1B[0m:\x1B[93m30\x1B[0m - \x1B[91merror\x1B[0m\x1B[90m TS7006: \x1B[0mParameter 'printText' implicitly has an 'any' type.\r\n" +
    '\r\n' +
    '\x1B[7m1\x1B[0m const multiplicator = (a, b, printText) => {\r\n' +
    '\x1B[7m \x1B[0m \x1B[91m                             ~~~~~~~~~\x1B[0m\r\n' +
    "\x1B[96mmultiplier.ts\x1B[0m:\x1B[93m2\x1B[0m:\x1B[93m3\x1B[0m - \x1B[91merror\x1B[0m\x1B[90m TS2584: \x1B[0mCannot find name 'console'. Do you need to change your target library? Try changing the 'lib' compiler option to include 'dom'.\r\n" +
    '\r\n' +
    '\x1B[7m2\x1B[0m   console.log(printText, a * b);\r\n' +
    '\x1B[7m \x1B[0m \x1B[91m  ~~~~~~~\x1B[0m\r\n',
  diagnosticCodes: [ 7006, 7006, 7006, 2584 ]
}
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! part9@1.0.0 ts-node: `ts-node "multiplier.ts"`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the part9@1.0.0 ts-node script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.

npm ERR! A complete log of this run can be found in:
npm ERR!     C:\Users\user\AppData\Roaming\npm-cache\_logs\2021-08-26T00_32_28_752Z-debug.log

标签: javascriptnode.jstypescriptnpm

解决方案


好吧,您缺少 tsconfig.json 让我们从

在里面

创建一个你需要的新项目

$ npm init

依赖关系

然后在你添加 package.json 的文件夹中运行这个

$ npm i -D typescript tslib tsutils ts-node

打字稿配置

现在创建一个打字稿项目运行这个

$ ./node_modules/typescript/bin/tsc --init

tsconfig.json

yow tsconfig.josn 是 typescript 的配置将在这里了解更多信息:https ://www.typescriptlang.org/tsconfig

开始

在你的情况下运行程序是这样的

{
   "scripts": {
       "start": "ts-node ./path-to-where-yow-file-is"
   }
}

推荐阅读