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. 在Python中裝飾裝飾器
- 9. 裝飾模式裝飾器限制
- 10. 在春天自動裝飾裝飾器
- 11. 裝飾器是不同於裝飾器的功能類嗎?
- 12. Typescript裝飾器與類的繼承
- 13. Typescript類裝飾器作爲Mixins
- 14. 用TypeScript中的裝飾器擴展類
- 15. 多個python裝飾器
- 16. Django:在其他裝飾器中重新使用login_required裝飾器
- 17. Sitemesh 2.4.2:如何使用除裝飾器之外的裝飾器
- 18. 如何將裝飾器與@contextmanager裝飾器混合使用?
- 19. 使用裝飾器,(rails)無法推斷ActiveRecord :: Base的裝飾器
- 20. Lua是否支持裝飾器?
- 21. 是否有像c#的python裝飾器?
- 22. 裝飾渲染器
- 23. 切換裝飾器
- 24. Django @login_required裝飾器
- 25. 創建裝飾器
- 26. Python memoization裝飾器
- 27. 使用@login_required裝飾器
- 28. 如何使用裝飾器?
- 29. Python中的裝飾器必須實現裝飾器模式嗎?
- 30. Python裝飾器和裝飾器模式有什麼區別?
只要您生成ES5的時間有90%,您並不真正關心它...... es2016和typecript都會轉換爲其他東西 – smnbbrv
true,但我正在談論打字稿不再生成的時間ES5。 – ishandutta2007
修飾者不是ES2016的一部分。 –