导入的类不能在带有 TypeScript 的 Angular.js 中用作服务

Posted

技术标签:

【中文标题】导入的类不能在带有 TypeScript 的 Angular.js 中用作服务【英文标题】:Imported class cannot be used as service in Angular.js with TypeScript 【发布时间】:2019-03-06 20:54:25 【问题描述】:

我正在将 ES6 项目转换为 TypeScript,但在 Angular.js 中使用 @typed/angular.service 调用时遇到了问题。

如果我这样做:

import * as angular from 'angular';
class OrderTreeService 

export const orderTree = angular
    .module('orderTree', [])
    .service('OrderTreeService', OrderTreeService)
    .name;

完美运行。 但是,如果我将该服务移动到文件 order-service.service.ts 并执行以下操作:

import * as angular from 'angular';
import  OrderTreeService  from './order-tree.service';

export const orderTree = angular
    .module('orderTree', [])
    .service('OrderTreeService', OrderTreeService)
    .name;

然后它不再起作用并出现此错误:

TS2345: Argument of type 'typeof OrderTreeService' is not assignable to parameter of type 'Injectable<Function>'.
  Type 'typeof OrderTreeService' is not assignable to type '(string | Function)[]'.
    Property 'pop' is missing in type 'typeof OrderTreeService'.

我不知道有什么区别?它是否会在途中丢失一些类型信息?

这是order-service.service.ts的内容:

export class OrderTreeService 

【问题讨论】:

【参考方案1】:

不完全确定,但在将OrderTreeService 移动到单个文件时,您是否从order-tree.service.ts 导出了OrderTreeService 服务?

order-tree.service.ts

export class OrderTreeService 

【讨论】:

以上是关于导入的类不能在带有 TypeScript 的 Angular.js 中用作服务的主要内容,如果未能解决你的问题,请参考以下文章

vue-class-component + typescript:如何在导入的函数中使用组件的类作为“this”的类型?

带有 toString() 的类可以用作字符串,但是如何说服 TypeScript 编译器呢?

如何让 TypeScript 对扩展从“节点模块”导入的类感到满意?

带有 es6 导入的 Module.exports 用于 typescript 中的 webpack.config.ts

如何在 Typescript 中正确使用 React.lazy() 来导入带有泛型类型参数的反应组件?

googleapis导入失败,带有typescript / vue / firebase托管