Javascript 如何使用Flowtype正确处理AngularJS$inject注释
我试图在AngularJS(1.5)项目中使用,但它会抱怨这个问题。正确的处理方法是什么 流量版本0.30.0 示例代码 导航/links-controller.jsJavascript 如何使用Flowtype正确处理AngularJS$inject注释,javascript,angularjs,flowtype,Javascript,Angularjs,Flowtype,我试图在AngularJS(1.5)项目中使用,但它会抱怨这个问题。正确的处理方法是什么 流量版本0.30.0 示例代码 导航/links-controller.js export default class LinksController { constructor(navigationService) { this.availableLinks = navigationService.availableLinks; } } LinksController.$inject
export default class LinksController {
constructor(navigationService) {
this.availableLinks = navigationService.availableLinks;
}
}
LinksController.$inject = ['NavigationService'];
导航/index.js
...
import NavigationService from './navigation-service';
import LinksController from './links-controller';
export default angular.module('app.links', [uirouter])
.config(routing)
.service('NavigationService', NavigationService)
.controller('LinksController', LinksController)
.name;
流程类型输出示例
LinksController.$inject = ['NavigationService'];
^^^^^^^ property `$inject`. Property not found
如果您使用的是外部依赖注入,那么您可能希望链接如下所示的函数
angular
.module('app',[])
.controller('LinkCtrl', LinkCtrl);
LinkCtrl.$inject = ['NavigationService'];
如果您完全像上面那样做了,您可以分享您的完整snipper吗?原因是,通过创建一个类,您正在流中定义它的接口 将
$inject
分配给类时,实际上是在添加一个未在类接口中定义的新属性,这是流中的类型错误
有两个选项可以使此类型签入流:
添加静态属性类型定义:
class LinksController {
static $inject: Array<string>;
constructor() {...}
}
LinksController.$inject = ['NavigationService'];
class LinksController {
static $inject = ['NavigationService'];
constructor() {...}
}
对于第二个选项,您需要在.flowconfig
的[options]
部分中启用esproposal.class\u static\u fields=enable
因为这是一个尚未添加到JavaScript标准中且在任何浏览器中都不可用的方案,所以您还需要使用以下内容来编译它(您需要或)。我没有真正使用Flowtype,但您的控制器没有直接声明
$inject
属性,因此,实际上Flowtype是正确的-未找到属性。也许您可以将配置更改为忽略$inject
关键字。您只能告诉flow忽略与指定正则表达式匹配的文件。我看不到任何可以忽略特定规则或关键字的选项。我已经用一些例子更新了我的问题。AngularJS应用程序本身正在运行,服务和控制器的注册或注入方式没有问题。只是流抱怨缺少属性。你能分享你为angular js创建的接口文件吗?谢谢。我已经在试验第二种方法,但是类字段和静态属性处于第二阶段,所以我不确定是否要使用它们。我将使用静态属性类型定义定义一个超类,流应该停止抱怨$inject。