Как определить тип для модуля внутри самого модуля? - PullRequest
0 голосов
/ 29 декабря 2018

Скажем, у меня есть файл машинописного текста с именем 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
}

Есть ли более простое решение?

Ответы [ 2 ]

0 голосов
/ 31 декабря 2018

Ответ Тициана может быть еще более упрощен:

hello.ts

export function hello1() { return 1 }
export function hello2() { return 1 }
export function hello3() { return 1 }

export type TypeOfThisModule = typeof import ('./hello');
0 голосов
/ 29 декабря 2018

Вы можете ссылаться на тип импорта как 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()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...