我需要一些帮助来开始定制打字稿的编译器输出,或者如果可能的话更加精确。
我有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。例如,对于“title”属性,将生成两个函数:
getTitle();
setTitle(value);
但没有ES 5属性。
所以在打字稿中你不能像这样访问你的财产:
让myclass = new MyClass(); myclass.title =“Hello World”;
但你必须使用getter和setter方法:
让myclass = new MyClass(); myclass.setTitle(“Hello World”);
我想在这里做的是编写这个打字稿代码:
let myclass = new MyClass();
myclass.title = "Hello World";
转换为这个javascript代码:
let myclass = new MyClass();
myclass.setTitle("Hello World");
我想我可以使用装饰器在我的类上执行此操作,但是您不能在声明文件中使用装饰器(d.ts)。所以我不能这样使用基类。
所以这是我的问题:
是否可以扩展typescript转换器并告诉它以不同的方式编译这些东西?
非常感谢向正确的方向发展。
答案 0 :(得分:1)
你可以制作自己的发布者。
TypeScript Language Service
(文档TSLS)和Compiler API
(文档Compiler API),您可以通过简单的方式处理脚本并构建自己的转换器。