babel typescript 运算符重载插件

babel typescript operator overloading plugin

我是babel的新手,但我熟悉typescript,我找到了this babel operator overloading example,但它是javascript的,我想使用运算符重载我的打字稿项目中的功能

我遵循 this typescript babel starter project 并尝试将其与上述运算符重载示例项目混合使用,但是当我尝试构建时,typescript 编译器给出以下错误:

> tsc --emitDeclarationOnly

src/index.ts:30:12 - error TS2365: Operator '+' cannot be applied to types 'import("/TypeScript-Babel-Overload/src/index").Point' and 'import("/TypeScript-Babel-Overload/src/index").Point'.

30 const p3 = p1 + p2
              ~~~~~~~


Found 1 error.

我在 github 上的示例项目:https://github.com/cjbd/TypeScript-Babel-Overload

如何让它发挥作用?请帮忙,谢谢!


更新:

感谢@Sly_cardinal,@ts-ignore 的作品,项目完全符合,我已经更新了 github

问题:我可以全局忽略所有操作员错误吗?因为我打算经常使用它

感谢@AlekseyL。 ,我忘记启用下面代码的插件了

'operator-overloading enabled'

class Point {

    constructor(x: number, y: number) {
        this.x = x
        this.y = y
    }

    [Symbol.for('+')](other: Point) {
        const x = this.x + other.x
        const y = this.y + other.y
        return new Point(x, y)
    }

    x: number;
    y: number;
}

// Check overloads work
const p1 = new Point(5, 5)
const p2 = new Point(2, 3)
// @ts-ignore: operator overloading
const p3 = p1 + p2;
console.log(`p3 = (${p3.x}, ${p3.y})`)

$ node lib/index.js
p3 = (7, 8)

TypeScript 不允许运算符重载,这就是您收到该错误的原因。

尝试使用 // @ts-ignore 注释来抑制该行的错误。

那应该仍然让 TypeScript 发出你的类型定义,但允许 babel 处理到 JavaScript 的转译。不过,您最终可能会得到奇怪的、不完整的或无效的类型定义。

(请参阅有关如何使用 ts-ignore 的注释:https://www.typescriptlang.org/docs/handbook/release-notes/typescript-2-6.html#suppress-errors-in-ts-files-using--ts-ignore-comments

在任何使用运算符重载或类似不受支持的 JavaScript 语法扩展的地方,您都需要使用 ts-ignore 注释。