TypeScript是ECMAScript 2015的一个严格超集,并且已经拥有装饰器支持。这是否意味着引入ECMAScript 2016装饰器,TypeScript装饰器变得多余或者是否意味着前进TypeScript必须更改其底层实现以生成ECMAScript 2016装饰器?ECMAScript 2016装饰器是否使TypeScript装饰器变得多余?
回答
因为它在docs regarding decorators指出:
装饰是一个实验性功能,可能会在未来 版本
打字稿,您可以使用未仍处在所有的JS实现的未来特性改变通过将输出编译成与目标环境相匹配的js来实现。
因此,例如这样的:
function deco(constructor: Function) { }
@deco
class A { }
编译成:
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
return c > 3 && r && Object.defineProperty(target, key, r), r;
};
function deco(constructor) { }
var A = (function() {
function A() {
}
return A;
}());
A = __decorate([
deco
], A);
正如你可以看到JS版本包含一个使其工作所需的一切。
如果有变化,那么编译器会更改为输出正确的js。
看到我不明白生成的代码'__decorate'的任何一点,如果将underling实现更改为transpiler,那么它肯定会使代码对于像我这样的人更具可读性,但不确定reablity完全是transpiler和thay的原则宁愿继续以相同的方式生成,直到出现故障。 – ishandutta2007
编译后的js并不意味着可读,它的意思是工作,尽可能少占用空间。您不应该自己更改编译的js,并且您应该相信编译器会根据您指定的目标输出正确的代码。 –
@ ishandutta2007我猜你在问什么TS装饰器最终会编译成ES装饰器。这是一个公平的问题,我认为我们现在还不知道答案,但我认为这很可能。已经有'ES2016,ES2017,ESNext'目标,但是我不知道编译器是否会为这些目标发射ES装饰器,我也不知道它们是否兼容目前的兼容规格。我也想知道这一点! – Aaron
- 1. 装饰装饰器
- 2. 是否可以在Typescript中修饰装饰器?
- 3. Typescript mixin类与装饰器
- 4. 如何在装饰器中重用TypeScript中的装饰器
- 5. 生成器装饰器是否存在?
- 6. Python装饰器
- 7. 与装饰器
- 8. 在春天自动装饰装饰器
- 9. 装饰模式装饰器限制
- 10. 在Python中装饰装饰器
- 11. 装饰器是不同于装饰器的功能类吗?
- 12. Typescript装饰器与类的继承
- 13. Typescript类装饰器作为Mixins
- 14. 用TypeScript中的装饰器扩展类
- 15. 多个python装饰器
- 16. Sitemesh 2.4.2:如何使用除装饰器之外的装饰器
- 17. Django:在其他装饰器中重新使用login_required装饰器
- 18. 使用装饰器,(rails)无法推断ActiveRecord :: Base的装饰器
- 19. 如何将装饰器与@contextmanager装饰器混合使用?
- 20. Lua是否支持装饰器?
- 21. 是否有像c#的python装饰器?
- 22. Python memoization装饰器
- 23. Django @login_required装饰器
- 24. 装饰渲染器
- 25. 切换装饰器
- 26. 创建装饰器
- 27. 使用@login_required装饰器
- 28. 如何使用装饰器?
- 29. Python中的装饰器必须实现装饰器模式吗?
- 30. Python装饰器和装饰器模式有什么区别?
只要您生成ES5的时间有90%,您并不真正关心它...... es2016和typecript都会转换为其他东西 – smnbbrv
true,但我正在谈论打字稿不再生成的时间ES5。 – ishandutta2007
修饰者不是ES2016的一部分。 –