我正在尝试使用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;
答案 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};