Получился следующий вариант - экспорт нэймспейса, внутри нэймспейса экспорт тех классов, что требуются снаружи и приватное описание тех классов, что нужны только для локального использования.
Например:
export namespace HintApi {
@Injectable()
export class HintService {
constructor(private httpClient: HttpClient, private appConfig: AppConfig) {
}
searchCompanyByPartial(searchText: string): Observable<SearchCompanyByPartialResponse> {
var request = new SearchCompanyByPartialRequest(searchText);
return this.httpClient.post<SearchCompanyByPartialResponse>("hint/searchCompanyByPartial", request);
}
}
class SearchCompanyByPartialRequest {
searchText: string;
constructor(searchText: string) {
this.searchText = searchText;
}
}
class SearchCompanyByPartialResponse {
public companies: SharedDto.Company[];
}
А в тех местах, где требуется использовать данный набор функционала:
import { HintApi } from "../../../api/hint.api"
constructor(
private fb: FormBuilder,
private apiHintService: HintApi.HintService) {
....
Если в нужном нэймспейсе есть какие-то классы, описывающие структуры данных, то к ним обращение идёт так же через импортированный алиас:
var someHintDto = new HintApi.SomeDto();