【问题标题】:Is there a problem mixing javascript and typescript in node projects?在节点项目中混合 javascript 和 typescript 是否存在问题?
【发布时间】:2023-04-09 06:20:02
【问题描述】:

我对 node.js 和 typescript 很陌生。我正在尝试通过从 python 移植现有应用程序来学习。我在意料之外的地方遇到了语法错误。

我有一个类是项目的主力。它在一个名为myClass.ts的文件中

myProject
└── js
    ├── commands
    │   └── rules.js
    ├── myClass.ts
    └── main.js

rules.js 包括 myClass 为:

try {
    const {myClass} = require("../myClass.ts")
} catch(e) {
    console.log(e)
}

我正在使用 PyCharm 并且可以在 catch 块中放置一个断点。错误指向类中的构造函数。错误是:

/home/me/PycharmProjects/myProject/js/myClass.ts:44
        rule_type: string,
                ^

SyntaxError: Unexpected token ':'
    at Object.compileFunction (node:vm:352:18)
    at wrapSafe (node:internal/modules/cjs/loader:1031:15)
    at Module._compile (node:internal/modules/cjs/loader:1065:27)
    at Object.Module._extensions..js (node:internal/modules/cjs/loader:1153:10)
    at Module.load (node:internal/modules/cjs/loader:981:32)
    at Function.Module._load (node:internal/modules/cjs/loader:822:12)
    at Module.require (node:internal/modules/cjs/loader:1005:19)
    at require (node:internal/modules/cjs/helpers:102:18)
    at Object.<anonymous> (/home/me/PycharmProjects/myProject/js/commands/rules.js:4:19)
    at Module._compile (node:internal/modules/cjs/loader:1101:14)

myClass 太大,放不下。它开始了:

const {randomInt} = require('crypto')

class myClass {
    constructor(
        rule_type: string,
        display_type: string,
        range_min: number     = 1,
        range_max: number     = 10000,
        display_mapping: {}   = undefined,
        value_adjustments: {} = undefined,
    ) {
        this.rule_type = die_type
        this.display_type = display_type
        this.range_min = Math.trunc(range_min)
        this.range_max = Math.trunc(range_max)
        this.display_mapping = display_mapping
        this.value_adjustments = value_adjustments
    }

    ...//a bunch of methods, etc
}

exports.myClass = myClass;

如果我去掉: string 类型提示,那么错误就会下降到下一个类型提示。以这种方式混合 javascript 和 typescript 有问题吗?

我为什么要混合js和ts?我找到了一个示例节点项目,这似乎是我想做的一个合理的起点。我认为为这门课尝试打字稿可能是一个很好的练习。

** 编辑 **

谢谢大家。很多东西要学...

【问题讨论】:

  • 我可以看到,您的错误来自 node.js。但是 node.js 当然只懂 Javascript,TypeScript 必须先转译。
  • 您是否在您的tsconfig 中启用了"allowJs": true
  • Typescript 是 Javascript 的超集。这意味着 Typescript 可以很好地理解 javascript,但是 Javascript 会认为 Typescript 代码充满了语法错误。需要将项目配置为使用 typescript,以便在 node 或浏览器中运行之前将 typescript 代码编译为 Javascript。

标签: javascript node.js typescript


【解决方案1】:

我不建议在开始时将.ts 文件和.js 文件混合在同一个项目中。由于 TypeScript 是 JavaScript 的超集,因此将每个 .js 文件更改为以 .ts 结尾不应破坏任何内容。然后您可以使用tsc 将所有内容编译为原生 JavaScript。

确保在您的tsconfig 文件中启用allowJs

【讨论】:

    猜你喜欢
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-09
    相关资源
    最近更新 更多