为什么我的打字稿文件没有使用gulp打字稿正确生成到js?

时间:2017-02-03 09:47:30

标签: javascript typescript gulp

我正在尝试使用gulp-typescript将一个打字稿文件转换为js。

似乎没有翻译。

gulp文件:

var ts = require('gulp-typescript');
gulp.task('tsToJs', function () {
    return gulp.src('./config.ts')
      .pipe(ts({
          moduleResolution: 'node',
          target:'es5',
          allowJs:true
          //out: 'config.js'
      }))
      .pipe(gulp.dest('./'));
});

config.ts:

class Config{
    env:{
        readonly live: '.co.uk',
        readonly dev: '.dev.co.uk',
        readonly qa:  'qa.co.uk'
    };
};
export = new Config;

似乎转换为此: (它缺少班级内的数据?) conf.js:

"use strict";
var Config = (function () {
    function Config() {
    }
    return Config;
}());
;
module.exports = new Config;

2 个答案:

答案 0 :(得分:1)

您声明您的env属性属于匿名类型,而不是使用具有属性的对象初始化它。将:更改为=

class Config{
    env = {
//      ^-------------------------------------- here
        readonly live: '.co.uk',
        readonly dev: '.dev.co.uk',
        readonly qa:  'qa.co.uk'
    };
}

但请注意the playground says您无法使用readonly。在简单对象属性上使用readonly在TypeScript手册中找不到任何示例。 (虽然在概念上它是合理的。)你可能需要更老式:

class Config{
    env = Object.create(Object.prototype, {
        live: {value: '.co.uk', enumerable: true, configurable: true},
        dev:  {value: '.dev.co.uk', enumerable: true, configurable: true},
        qa:   {value: 'qa.co.uk', enumerable: true, configurable: true}
    });
}

(当然,如果您不希望属性可枚举或可配置,只需将它们保留为关闭。它们将不可写,因为所有这些标志的默认值为false。)< / p>

旁注:由于这是一个声明而不是表达式,因此后面没有;;是一个语句终止符;声明是自我终止的。

答案 1 :(得分:0)

我真的想保留readonly,因为它有助于vscode显示使用它们的变量的值。在没有编译的情况下,似乎没有任何其他方式显示javascript变量。这个功能是我想在这种情况下使用打字稿的原因。

这是最接近实现我想要的,这确实有效:

const env = new (class Env{
    readonly live = '.co.uk';
    readonly dev = '.dev.co.uk';
    readonly qa = '.qa.co.uk';
})();

const brand = new (class Brand{
    readonly cm = 'mysite';
})();

export {brand, env};