从角度上说,如果我有一个服务,并且该服务提供了一个在其他地方定义的类的实例,那么该服务的所有使用者是否需要有两个导入,或者服务和它提供的对象都可以从服务定义中导入?例如
Foo.ts:
export class Foo {
...
}FooProviderService.ts
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语句。
发布于 2022-01-09 21:20:00
这个问题主要集中在TypeScript语言上,而不是扭曲web框架。
在类型记录中,您可以隐式地使用类型而不导入它们:
// 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类型很有用。
function createA(): A {
return { prop1: 'hello '}
}
type AA = ReturnType<typeof createA>您也可以根据类函数执行类似的映射:
class Sample {
getA(): A {
return { prop1: 'hello '}
}
}
const s = new Sample()
type AA = ReturnType<typeof s.getA> // AA is equivalent to Ahttps://stackoverflow.com/questions/70643890
复制相似问题