2017-06-15 74 views
0

我需要一些帮助来定制打字稿的编译器输出,或者如果它甚至可能更精确。自定义Typescript编译器输出

我有openui5框架,其中的语法,例如扩展类,从ES5 +标准差异很大。 AMD的工作方式也不同。

这里是一个例子:

我想导入一个模块。在打字稿它应该是:

import { Button } from "sap/m/Button"; 

其推出这样的事情在JavaScript:

var Button = require("sap/m/Button"); 

但我在这里需要的是:

var Button = sap.ui.require("sap/m/Button"); 

又如:

属性通过getter和setter函数解决。所以,当你扩展一个类你可以给它具有属性的JSON对象:

properties: { 
    "title" : "string",       // a simple string property, default value is undefined 
    "buttonText" : {defaultValue: "Search"}, // when no type is given, the type is string 
    "showLogoutButton" : {type : "boolean", defaultValue : true}, // a boolean property where a default value is given 
    "width" : {type : "sap.ui.core.CSSSize", defaultValue : "50px"} // a CSS size property where a default value is given 
} 

现在openui5将采取给予财物并生成setter方法。例如,对于“标题”属性,将生成两个功能:

getTitle(); 
setTitle(value); 

但是没有ES 5属性。

所以在打字稿你不能访问你的财产是这样的:

让MyClass的=新MyClass的(); myclass.title =“Hello World”;

但你必须使用getter和setter方法:

让MyClass的=新MyClass的(); myclass.setTitle(“Hello World”);

我想在这里做什么是写这个打字稿代码:

let myclass = new MyClass(); 
myclass.title = "Hello World"; 

这transpiles本javascript代码:

let myclass = new MyClass(); 
myclass.setTitle("Hello World"); 

我想我可以使用装饰我的班做,但是你不能在声明文件(d.ts)中使用装饰器。所以我不能以这种方式使用基类。

因此,这里是我的问题:

是否有可能延长打字稿transpiler并告诉它以不同的方式编译这个东西?

在正确的方向推动将不胜感激。

+0

这听起来像你想要的是等待一个新版本的openui5。 – 2017-06-16 09:22:11

+0

有计划接近ES标准吗? –

+0

不知道,你必须咨询他们的路线图,即使它存在,几乎不可能搜索,因为显然有一个名为Roadmap的小部件。 – 2017-06-16 09:47:53

回答

1

你可以制作自己的翻译。

  1. 使用TypeScript Language Service(文档TSLS)和Compiler API(文档Compiler API),你可以处理脚本,并通过简单的方式建立自己的transpiler通过脚本
  2. 延伸打字稿的源代码。
  3. 按框架要求编写代码。
+1

谢谢你的回答。我通过编译器api读取。所以这里有一个后续问题:如果我扩展了ts编译器,例如,我将不得不部署源代码并通过gulp运行它。有没有办法将脚本“附加”到打字稿编译器? –

+0

我认为这是不可能的。您可以编写自己的编译器来更新源代码,然后调用普通的编译器。 – Misaz

+0

好的,太好了。由于我想将它包含在vscode扩展中,我认为我可以做到这一点。非常感谢您的帮助。我将看看编译器API。 –