说我有一个名为hello-service.ts
的打字稿文件:
export function hello1() { ... }
export function hello2() { ... }
export function hello3() { ... }
在某些情况下,我们需要此模块的类型。我们可以像这样在另一个ts文件中引用它:
import * as helloService from './hello-service.ts';
function getHelloModule(): typeof helloService {
return hello;
}
但是我想知道,是否有可能在hello-service.ts
文件本身的内部 定义这种类型?
目前,我只能通过指定每个函数来实现这一点,这很无聊:
export type HelloServiceType = {
hello1: typeof hello1,
hello2: typeof hello2,
hello3: typeof hello3
}
有没有更简单的解决方案?
答案 0 :(得分:1)
您可以将导入类型称为typeof import('./hello-service.ts')
。这肯定可以从模块外部进行工作。我从未在模块中使用过它,但是从我尝试过的结果来看,即使它有点递归,它也能按预期工作:
// ./hello-service.ts
export function hello1() { }
export function hello2() { }
export function hello3() { }
declare var exports: Self;
type Self = typeof import('./hello-service')
export let self: Self = exports;
// usage.ts
import * as hello from './hello-service'
hello.self.hello1()
答案 1 :(得分:1)
提香的答案可以进一步简化:
hello.ts
export function hello1() { return 1 }
export function hello2() { return 1 }
export function hello3() { return 1 }
export type TypeOfThisModule = typeof import ('./hello');