2

我正在编写一个 TypeScript 应用程序,它需要两个数字并将数字的总和打印到控制台。

calculator2.ts

export namespace calculator
{
    export function add(a: number, b: number): number
    {
        return a + b;
    }

    export function subtract(a: number, b: number): number
    {
        return a - b;
    }
}

app.ts

import {calculator} from './calculator2';

var answer = calculator.add(3, 4);
console.log('Answer: ' + answer);

我运行 tsickle 将 TypeScript 转换为 Google Closure Compiler 可以理解的 JavaScript。然后我运行带有高级优化标志的闭包编译器来缩小我的代码。

这是输出(漂亮打印):

var a;
(function(d) {
  d.add = function(b, c) {
    return b + c;
  };
  d.a = function(b, c) {
    return b - c;
  };
})(a || (a = {}));
var e = a.add(3, 4);
console.log("Answer: " + e);

正如预期的那样,这将打印 7,但是calculator.subtract()(d.a在缩小的代码中) 没有被删除,而我没有使用它。

如果我calculator像这样修改文件:

export var calculator: any =
{
    add: function(a: number, b: number): number
    {
        return a + b;
    },

    subtract: function(a: number, b: number): number
    {
        return a - b;
    }
};

闭包编译器输出:

console.log("Answer: 7");

有没有办法告诉闭包编译器该subtract函数未被调用(至少不是从app.ts)并且可以将其删除?

另一个测试:

使用'calculator3.ts'

export class calculator
{
    public add(a: number, b: number): number
    {
        return a + b;
    }

    public subtract(a: number, b: number): number
    {
        return a - b;
    }
}

和“app.ts”

import {calculator} from './calculator3';

var myCalculator = new calculator();
var answer = myCalculator.add(3, 4);
console.log('Answer: ' + answer);

生成:

var c = (new (function() {
  function a() {
  }
  a.prototype.add = function(a, b) {
    return a + b;
  };
  return a;
}())).add(3, 4);
console.log("Answer: " + c);

哪个删除了subtract功能,但没有优化console.log("Answer: 7")(这不是必需的,但会很棒)

4

0 回答 0