代码之家  ›  专栏  ›  技术社区  ›  Mistic

扩展角度类型脚本定义

  •  1
  • Mistic  · 技术社区  · 8 年前

    我正在尝试为创建TS定义文件 https://github.com/niqdev/angular-q-extras

    你可以在这里找到我写的全部定义 https://github.com/mistic100/DefinitelyTyped/blob/angular-q-extras/types/angular-q-extras/index.d.ts

    它只包含添加到IQService的几个方法, 摘录:

    declare var _: string;
    export = _;
    
    import * as angular from 'angular';
    
    declare module 'angular' {
        namespace angular {
    
            interface IQService {
                allSettled(promises): IPromise<any>;
            }  
    
        }
    }
    

    问题是,当运行DefinitelyTyped linter或尝试使用该定义时,出现以下错误:

    无法使用值导出扩充模块“angular”,因为它解析为非模块实体。

    还有一些:

    找不到名称“IPromise”。

    我真的不明白为什么它适用于其他定义而不是我的定义。我可能忘记了一件显而易见的事情,但我不知道是哪件。

    1 回复  |  直到 8 年前
        1
  •  2
  •   Matt McCutchen    7 年前

    重新:

    Cannot augment module 'angular' with value exports because it resolves to a non-module entity.

    因为角度类型的定义是:

    declare var angular: angular.IAngularStatic;
    export = angular;
    

    不能再定义表单中的任何项 angular.foo.bar 在运行时存在的,例如 qextras.PromiseState ,因为他们会与 angular qextras.承诺状态 而且它的常量在运行时并不是由angular-q-extras在这个名称下定义的(也许它们在另一个名称下?我不明白这些棱角分明的东西是怎么工作的),所以用这种方式来声明它们是误导人的。您可以做的一件事是只声明一个类型而不是枚举:

    type PromiseState = 'fulfilled' | 'rejected';
    

    你可能认为你可以使用 const enum 常量枚举 以及 角度的 编译时的变量。(编辑: confirmed by the TypeScript team .)

    看起来像是 IPromise declare module 'angular' 没有通过。

    你没有问这个问题,但在我看来你还需要删除 namespace angular IQService . AIUI,即使角度类型声明有 命名空间角度 ,扩展的根是角度类型声明指定为导出的内容,即 命名空间角度 ,所以你不应该再筑巢 命名空间角度 .

    推荐文章