首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法声明应用程序的扩展方法(离子角)

无法声明应用程序的扩展方法(离子角)
EN

Stack Overflow用户
提问于 2018-10-08 20:22:46
回答 1查看 162关注 0票数 0

在我的/ext/app-entension.ts (“类型记录”:"^2.4.2")中,我声明了App (离子角)类的扩展函数:

代码语言:javascript
运行
复制
// **error #1** from the list below
import { NavController, App } from "ionic-angular"; 

interface App {
    getMyCoolNav(): NavController;
}

// **error #2** from the list below
App.prototype.getMyCoolNav = function(this: App): NavController {
    // logic to define suitable nav combining the following calls
    // this.getRootNavs && this.getActiveNavs
    // **error #3** from the list below
}

在我的页面中,我可以导入这个扩展并使用它,没有任何问题:

代码语言:javascript
运行
复制
import { NavController, App } from "ionic-angular";
import '../ext/app-extensions'

// **error #4** from the list below
this.app.getMyCoolNav().push(MyCoolPage);

它在运行时运行良好,而VS代码/类型记录让我很难处理各种错误:

  1. 导入: ts导入声明与本地声明'App‘冲突。
  2. 原型分配:在'App‘类型上不存在ts属性'getMyCoolNav’。
  3. 原型中的this用法:在'App‘类型上不存在ts属性'getRootNavs’。
  4. 在我的页面中: ts属性'getMyCoolNav‘在'App’类型上不存在。

我的扩展方法注册可能有什么问题?

EN

回答 1

Stack Overflow用户

发布于 2018-10-09 01:25:16

您需要使用接口扩展模块,以便告诉编译器有关新接口的信息。例如:

文件test.ts

代码语言:javascript
运行
复制
export class Test {
    getSomething(): string {
        return "something";
    }
}

文件testExtensions.ts

代码语言:javascript
运行
复制
import { Test } from "./test";

declare module "./test" {
    interface Test {
        getSomethingElse(): string;
    }
}

Test.prototype.getSomethingElse = function(): string {
    return "somethingElse";
}

这确实告诉了编译器有关接口的信息,您应该能够根据需要扩展原型。参见https://www.typescriptlang.org/docs/handbook/declaration-merging.html,搜索“模块增强”

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52709589

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档