使用 TypeScript 从 angular $modalInstance 返回强类型的 promiseValue

Posted

技术标签:

【中文标题】使用 TypeScript 从 angular $modalInstance 返回强类型的 promiseValue【英文标题】:Returning a strongly typed promiseValue from angular $modalInstance with TypeScript 【发布时间】:2015-11-30 19:57:51 【问题描述】:

TypeScript 新问题。我正在尝试从 Angular 的 $modalInstance 返回一个强类型的承诺。

我有类似的东西:

this.$modal.open(options).result.then(result => 
    Currently result is type 'any'.  
    How do I cast it or affect it to be of type MyType?  (see below)         
);


interface myType 
    a: string,
    b: number


result: myType;
...

$modalInstance.close(this.result)

【问题讨论】:

【参考方案1】:

我实际上必须包装 $modal 和 $modalInstance 服务来获取类型 T。上面的答案(我最初尝试过)将不起作用,因为 $modalInstance 结果是类型“任何”的承诺。被包装的 $modalInstance 是一个 T 类型的承诺。

module my.interfaces 

export interface IMyModalService<T> 
    open(options: ng.ui.bootstrap.IModalSettings): IMyModalServiceInstance<T>;


export interface IMyModalScope<T> extends ng.ui.bootstrap.IModalScope 
    $dismiss(reason?: any): boolean;
    $close(result?: T): boolean;


export interface IMyModalServiceInstance<T> extends ng.ui.bootstrap.IModalServiceInstance 
    close(result?: T): void;
    dismiss(reason?: any): void;
    result: angular.IPromise<T>;
    opened: angular.IPromise<any>;
    rendered: angular.IPromise<any>;

【讨论】:

【参考方案2】:
this.$modal.open(options).result.then((result: myType) => 
    Now result is declared to be of your type        
);

【讨论】:

虽然这可能会回答这个问题,但也应该解释一下这个问题是如何以及为什么解决的 我实际上必须包装 $modal 和 $modalInstance 服务来获取类型 。上面的答案(我最初尝试过)将不起作用,因为模态结果返回类型为“any”的承诺。包装好的 $modal 返回一个 . 类型的承诺

以上是关于使用 TypeScript 从 angular $modalInstance 返回强类型的 promiseValue的主要内容,如果未能解决你的问题,请参考以下文章

如何从类属性 TypeScript 中侦听值更改 - Angular

从 Typescript Angular 获取 CSS 参数

使用 Typescript 从 Angular 6 的在线链接中显示 Pdf

使用 Angular2、angularfire2 和 Typescript 从 Firebase 对象中获取数据

如何从 Angular2(Typescript)中的 Json 数组中获取值的总和

从 Angular Typescript 导入 css3/compass