到目前为止,我们被用来TSD或(更好的版本吧)分型
但是现在TypeScript 2提供了新@types功能,我应该如何将当前项目转换为@types?
我有tsd.json(typings.json是一些情况)与所有依赖项,移动到TypeScript 2的步骤是什么?
什么是新的最佳做法?@types是否支持特定版本?
我知道在新的ES6模块语法中,JavaScript引擎不必评估代码以了解所有导入/导出,它只会解析它并"知道"要加载的内容.
这听起来像是在吊装.ES6模块是否悬挂?如果是这样,它们会在运行代码之前加载吗?
这段代码可以吗?
import myFunc1 from 'externalModule1';
myFunc2();
if (Math.random()>0.5) {
import myFunc2 from 'externalModule2';
}
Run Code Online (Sandbox Code Playgroud) 在IE10 +上使用angularJS,TextArea和占位符时,我得到" 无效参数 ".
这将仅在textarea节点关闭时</textarea>发生,并且当我现在关闭textarea时不会发生.
这将引发"无效参数"异常:
<div ng-app>
<input ng-model="placeholderModel" type="text"/>
<textarea id="message" placeholder="{{placeholderModel}}" ng-model="textareaModel"></textarea>
</div>
Run Code Online (Sandbox Code Playgroud)
这将没有问题:
<div ng-app>
<input ng-model="placeholderModel" type="text"/>
<textarea id="message" placeholder="{{placeholderModel}}" ng-model="textareaModel"/>
</div>
Run Code Online (Sandbox Code Playgroud)
在这里运行示例:http://jsfiddle.net/huecc/
我想编写一个在构造函数中获取"前缀"参数的TypeScript类,该类还需要访问LogService注入.
使用纯JavaScript,您应该这样做:
angular.module('myModule', []).factory('LogWithPrefixFactory', ['LogService', function(LogService) {
var LogWithPrefixFactory = function(prefix) {
this.prefix = prefix;
}
LogWithPrefixFactory.prototype.log = function(txt) {
// we have access to the injected LogService
LogService.log(this.prefix, txt);
}
return LogWithPrefixFactory;
}]);
Run Code Online (Sandbox Code Playgroud)
因此,当您将此工厂注入控制器时,您可以像这样多次启动它(无需注入LogService):
angular.module('myModule').controller('Ctrl', function(LogWithPrefixFactory) {
var foo = new LogWithPrefixFactory("My PREFIX");
var foo = new LogWithPrefixFactory("My OTHER PREFIX");
}
Run Code Online (Sandbox Code Playgroud)
您如何在TypeScript类中定义此Factory?无法在函数内定义TypeScript类...此类应该可以访问LogService,但它无法在其中一个注入中获取.
我已经使用Twitter的说明 在我的网站上添加了一个Twitter 关注按钮但是在Chrome控制台中我看到了这个警告:
Consider using 'dppx' units, as in CSS 'dpi' means dots-per-CSS-inch, not dots-per-physical-inch, so does not correspond to the actual 'dpi' of a screen. In media query expression: (-webkit-min-device-pixel-ratio: 1.5), (min-resolution: 144dpi)
Run Code Online (Sandbox Code Playgroud)
不知道怎么解决这个问题?
我在ts目录下有4个TypeScript文件.我可以使用typescript:base任务将它们全部编译成一个带有源映射(main.js.map)的文件(main.js).
但是,uglify在编译多个 TypeScript文件时尝试这些文件不起作用.uglify当sourceMapIn用多个文件制作时,好像很困惑.
如何将具有多个文件的TypeScript项目编译为一个带有源映射的文件(返回原始ts文件)
这是grunt文件:
module.exports = function (grunt) {
grunt.initConfig({
uglify: {
dist: {
options: {
sourceMap: '../js/main.min.map',
sourceMapIn: 'main.js.map',
sourceMapRoot: '../ts/'
},
files: {
'../js/main.min.js': ['main.js']
}
}
},
typescript: {
base: {
src: ['**/*.ts'],
dest: '../js/main.js',
options: {
module: 'amd',
sourcemap: true,
declaration: false
}
}
}
});
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-typescript');
grunt.file.setBase('../ts');
grunt.registerTask('default', ['typescript:base', 'uglify:dist']);
};
Run Code Online (Sandbox Code Playgroud)
谢谢!
我在我的项目中使用TypeScript,我有很多.ts文件,大约50个文件.我正在使用IntelliJ和一个文件观察器来保存.问题是我想在命令上编译完整的项目,看看整个项目编译是否有任何错误(有依赖关系),有没有一个好方法呢?
谢谢Gil Amran
我正在尝试向函数表达式添加函数装饰器。装饰器适用于函数声明,但不适用于函数表达式。
装饰师:
function track(val: string) {
return function(_target: any, _key: string, descriptor: any) {
const originalMethod = descriptor.value;
descriptor.value = function(...args: any[]) {
Logger.log(val);
originalMethod.apply(this, args);
};
return descriptor;
};
Run Code Online (Sandbox Code Playgroud)
我试图注释的函数表达式:如果我尝试像这样装饰,它将不起作用:
const handleClick = @track('trackMe') (e) => { console.log(e) };
Run Code Online (Sandbox Code Playgroud)
或这个:
@trackMetric('sdf')
const handleClick = (e) => { console.log(e) };
Run Code Online (Sandbox Code Playgroud)
我有experimentalDecorators上和目标标志ES5。
打字稿的有target很多值,配置一样esnext,es2015,es6等。(很混乱)
NodeJ的当前版本(11.11.0)支持JavaScript的许多新功能。以esnextTypeScript 为目标可以吗?能行吗
如果不是,那么target在定位nodeJs 11.11.0时使用什么权利
编辑:
感谢@Seblor,我们知道它esnext非常动态,TC39可以添加合适的功能。它表示正在使用的JavaScript的下一版本(关于功能约定)
改进后的问题应该是:根据NodeJs的当前版本(11.11.0)和TypeScript的当前版本(3.3),我们可以将其esnext用作target?
我想采用 Scala 案例类并将其导出到 d.ts(TypeScript 定义)文件中。是否可以?如果是这样,最好的方法是什么?
谢谢
我正在使用grunt连接livereload用于我的开发环境.
我希望能够调用/ server下的生产API.
要做到这一点,我需要指挥任何来电
http://localhost:9000/server
至
http://www.production-server.com/server
这对我有好处,因为有时我想在开发模式下对生产服务器进行测试.
这是我当前的连接配置(由Yeoman生成):
connect: {
options: {
port: 9000,
// Change this to '0.0.0.0' to access the server from outside.
hostname: 'localhost',
livereload: 35729
},
livereload: {
options: {
open: true,
middleware: function(connect, options, middlewares) {
return [
connect.static('.tmp'),
connect().use(
'/bower_components',
connect.static('./bower_components')
),
connect.static(appConfig.app)
];
}
}
},
test: {
options: {
port: 9001,
middleware: function(connect) {
return [
connect.static('.tmp'),
connect.static('test'),
connect().use(
'/bower_components',
connect.static('./bower_components')
),
connect.static(appConfig.app)
];
}
}
},
dist: {
options: { …Run Code Online (Sandbox Code Playgroud)typescript ×7
node.js ×3
angularjs ×2
gruntjs ×2
javascript ×2
case-class ×1
compilation ×1
decorator ×1
ecmascript-6 ×1
es6-modules ×1
hoisting ×1
scala ×1
tsd ×1
twitter ×1
uglifyjs ×1