SAPUI5,打字稿和类型别名,如何使用别名为

时间:2019-01-24 12:56:16

标签: typescript sapui5

在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的环境定义是自定义的,因此问题可能出在这里。

1 个答案:

答案 0 :(得分:0)

我完全错过了我的问题的明显答案。不用“ type”关键字,而是使用“ import”关键字:

import JSONModel = sap.ui.model.json.JSONModel;

这确实允许“新”并引用静态属性和方法,因为它为名称的所有含义分配了新名称。