【问题标题】:Typescript : Alias a long module name打字稿:别名长模块名称
【发布时间】:2019-11-30 02:09:38
【问题描述】:

我已经查过了,回答了以下问题:

Alias External Module in TypeScript

Type reference without full namespace

但我还是很困惑。这不是“要求”,只是愿望。我在 Typescript 中使用Kendo UI 和他们的 MVVM 架构,我发现自己不断地输入这个......

class Item extends ItemPrototype {
   public Quality: kendo.data.ObservableObject = new kendo.data.ObservableObject();
}

是的,这很好用,但它变得令人讨厌。有没有办法可以设置打字稿让我使用速记?喜欢...

class Item extends ItemPrototype {
   public Quality: observable = new observable();
}

【问题讨论】:

    标签: typescript


    【解决方案1】:

    是的,有办法。 import 可用于导入模块或定义类型名称以使其更短。这是后者的一个例子:

    declare module alpha.bravo.charlie {
        export class Delta {
            constructor();
        }
    }
    
    import Delta = alpha.bravo.charlie.Delta;
    let d: Delta = new Delta();
    

    您还可以通过让类型推断系统完成一些工作来节省输入。

    let d = new Delta();
    

    【讨论】:

    • 请注意:使用动态加载 .js 的外部源时,您可能会遇到时间问题,如果您所别名的(类型).js 不是,您的导入可能会失败d/l 还没有。我希望我可以在这种非典型案例的回调中调用导入。 bing maps v8 发生在我身上。
    【解决方案2】:

    从 1.4 开始,我们可以使用 type 关键字。

    随着 TypeScript 1.3 的推出,我们专注于添加更多类型 系统和 ECMAScript 6 功能到 TypeScript。让我们快速 看看你接下来可以使用的一些新功能 TypeScript 的发布。所有这些功能都在master中 如果您想查看它们,请在我们的 GitHub 存储库中进行分支 今天你自己。

    借助这些功能,我们可以更准确、更轻松地使用 在运行时可能具有不同类型的变量和表达式。 总之,这些特性有助于减少对显式类型的需求 注释、类型断言和“任何”类型的使用。类型 定义文件 (.d.ts) 作者可以使用这些来更准确地 描述外部库。对于那些跟随发展 编译器,你会注意到我们已经在 今天的编译器。

    欲了解更多信息,请访问:TypeScript 1.4 sneak peek: union types, type guards, and more

    例子:

    让我们创建一个简单的模型:basemodel.ts

    module NameSpace {
        export module Model {
            export class BaseModel {
                public Id: number;
                public Name: string;
            }
        }
    }
    

    我们需要在控制器中使用这个模型。

    /// <reference path="path to base model.ts" />
    
    type BaseModel = NameSpace.Model.BaseModel;
    
    module NameSpace {
        export module Controller {
            export class BaseController  {
                public entities: new Array<BaseModel>();
    
                constructor(externalEntities: Array<BaseModel>) {
                    this.entities = externalEntities;
                }
            }
        }
    }
    

    【讨论】:

    • 类型别名不适用于问题的示例,因为它们只为类型引入一个新名称,而不是它的构造函数(const Quality: observable 可以工作,const quality = new observable() 不会)
    • 您好可以与源(要点等)共享示例吗?
    • 滚动到顶部,查看问题中给出的示例并尝试使用类型别名缩短表达式new kendo.data.ObservableObject()。你会发现这是不可能的,因为表达式中的构造函数是一个函数,并且类型别名不会为值(例如函数)引入一个新名称,只为类型引入一个新名称。在您的示例中,错误将位于第二个 sn-p 中的 new BaseModel()
    • 请访问:gist.github.com/dimitardanailov/c2ab460743a72a5ed457。 Angularjs 1.4 和 Typescript 之间的实现。
    • 参见示例中的第 78 行:const tempButton: SubmitButton = new Myteletouch.Entity.DOM.FormElement.SubmitButton.SubmitButton(。它不能单独使用 type 别名来缩短。我觉得我在和墙说话。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-28
    • 1970-01-01
    • 1970-01-01
    • 2021-09-30
    • 1970-01-01
    相关资源
    最近更新 更多