在SAPUI5中,有一个约定,即使用较短的模块名称使用它们的模块加载器来对类型进行别名,例如:
sap.ui.define([
"sap/ui/core/mvc/Controller",
"sap/ui/model/json/JSONModel",
], function (Controller, JSONModel) {
现在,我想创建一个包含内部代码的TypeScript类,但是我发现,如果我设置了一个参数,例如'JSONModel:sap.ui.model.json.JSONModel'-那么我就不能使用'new ' 用它。我认为这是因为简称是类的定义,而不是类的实例(或某种实例),而且我不知道如何在TS中将其指定为类型。
我注意到长类型'sap.ui.model.json.JSONModel'可以与new关键字一起使用,并且我还注意到您可以别名类型为'type JSONModel = sap.ui.model.json .JSONModel”,问题在于它并非在所有情况下都有效:
namespace EX {
type JSONModel = sap.ui.model.json.JSONModel;
export class Example {
public constructor(con: sap.ui.core.mvc.Controller) {
let model1 = new JSONModel();
let model2 = new sap.ui.model.json.JSONModel();
}
}
}
model1不会验证“(TS)JSONModel是类型,但在此处用作值”,但是model2可以。还有什么比新关键字更具有“ TYPE”意义?我究竟做错了什么。干杯。
我在VS2017中使用TypeScript 3.1-我对JSONModel的环境定义是自定义的,因此问题可能出在这里。
答案 0 :(得分:0)
我完全错过了我的问题的明显答案。不用“ type”关键字,而是使用“ import”关键字:
import JSONModel = sap.ui.model.json.JSONModel;
这确实允许“新”并引用静态属性和方法,因为它为名称的所有含义分配了新名称。