首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >导入服务模块使用的支持类?

导入服务模块使用的支持类?
EN

Stack Overflow用户
提问于 2022-01-09 17:38:58
回答 1查看 31关注 0票数 0

从角度上说,如果我有一个服务,并且该服务提供了一个在其他地方定义的类的实例,那么该服务的所有使用者是否需要有两个导入,或者服务和它提供的对象都可以从服务定义中导入?例如

Foo.ts:

代码语言:javascript
复制
export class Foo {
  ...
}

FooProviderService.ts

代码语言:javascript
复制
import { Foo } from './Foo'
@Injectable({
   providedIn: 'root'
})
export class FooProviderService {
    constructor(){}
    createFoo(name : string) : Foo {
        return new Foo(name);
    }
}

我的问题是,如果我有一个使用FooProviderService的组件,是否有方法从FooProviderService导入导入Foo的定义,而不是有两个导入语句?

动机是,我在文件中创建了一个支持类,定义了一个服务,然后决定我需要将它提取到它自己的单独文件中。此时,我必须遍历每个组件中的所有代码,这些组件使用服务更改导入来从新文件获得支持类,而不是从服务导入语句中获得支持类。

也就是说,是否有任何方法在服务的使用者中保留原始的导入定义,即使Foo是在一个单独的文件中定义的,而不必取出Foo并给它自己的import {FooProviderService, Foo} from '../foo_provider_service.ts语句。

EN

Stack Overflow用户

发布于 2022-01-09 21:20:00

这个问题主要集中在TypeScript语言上,而不是扭曲web框架。

在类型记录中,您可以隐式地使用类型而不导入它们:

代码语言:javascript
复制
// file1.ts
export interface A {
  prop1: string
}
export function createA(): A {
  return { prop1: 'Hello World!' }
}

// file2.ts
import { createA } from './file1'

const obj = createA()

// OK even if I didn't import the interface explicitly
obj.prop1 

只要在函数体中隐式使用该类型,它就能正常工作。一旦需要从类中注释其他内容,比如方法参数或属性,就需要导入所述接口。

另一件可以为您解决的事情是使用实用程序类型

实用程序类型允许您根据其他类型动态定义类型。具体来说,我认为您可能会发现函数的ReturnType类型很有用。

代码语言:javascript
复制
function createA(): A {
    return { prop1: 'hello '}
}
type AA = ReturnType<typeof createA>

您也可以根据类函数执行类似的映射:

代码语言:javascript
复制
class Sample {
    getA(): A {
        return { prop1: 'hello '}
    }
}
const s = new Sample()
type AA = ReturnType<typeof s.getA> // AA is equivalent to A
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70643890

复制
相关文章

相似问题

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