Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 扩充角度类型脚本定义_Angular_Typescript_Promise_Type Declaration - Fatal编程技术网

Angular 扩充角度类型脚本定义

Angular 扩充角度类型脚本定义,angular,typescript,promise,type-declaration,Angular,Typescript,Promise,Type Declaration,我正在尝试为创建TS定义文件 你可以在这里找到我写的完整定义 它只包含添加到IQService的几个方法, 摘录: declare var _: string; export = _; import * as angular from 'angular'; declare module 'angular' { namespace angular { interface IQService { allSettled(promises): IPr

我正在尝试为创建TS定义文件

你可以在这里找到我写的完整定义

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

declare var _: string;
export = _;

import * as angular from 'angular';

declare module 'angular' {
    namespace angular {

        interface IQService {
            allSettled(promises): IPromise<any>;
        }  

    }
}
declare var\ux:string;
出口=uu;
从“角度”导入*作为角度;
将模块声明为“角度”{
名称空间角度{
接口服务{
所有已解决(承诺):我承诺;
}  
}
}
它主要基于Angular插件的其他定义

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

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

还有一堆:

找不到名称“IPromise”

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

Re:

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

因为角度类型定义中说:

declare var angular: angular.IAngularStatic;
export = angular;
无法定义运行时存在的任何形式的
angular.foo.bar
项,例如枚举
qextras.PromiseState
,因为它们会与
angular
声明的变量冲突。事实上,AFAICT,
qextras.PromiseState
及其常量在运行时并不是由angular-q-extras以这个名称定义的(也许它们是以另一个名称定义的?我不明白所有这些angular的东西是如何工作的),所以以这种方式声明它们会产生误导。您可以做的一件事是只声明一个类型而不是枚举:

type PromiseState = 'fulfilled' | 'rejected';
您可能认为可以使用
const-enum
,因为它是通过TypeScript编译出来的,但我想仍然存在一个问题,即编译时
const-enum
angular
变量的成员之间的表达式可能不明确。(编辑:)

看来
IPromise
错误是
声明模块“角度”失败的后果


您在问题中没有问到这一点,但在我看来,您还需要从
IQService
周围删除
名称空间
。AIUI,即使Angular类型声明有一个
名称空间Angular
,您的扩展也基于Angular类型声明指定为导出的内容,即
名称空间Angular
,因此您不应该嵌套另一个
名称空间Angular
,谢谢,问题确实是enum,它编译为实际的JS,而不是union类型。我还必须删除名称空间。