Как я могу включить другое объявление в свой пользовательский файл объявления типографского текста?

#typescript

Вопрос:

У меня есть несколько заявлений в src/types/*.d.ts и в моем src/types/role.d.ts , у меня есть:

 declare interface Role {
  id: string;
  title: string;
  openings: string;
  jobDescriptionUrl?: string;
  minCompRange: number | string;
  maxCompRange: number | string;
  location: string;
  postCovidLocation: string;
  urgency: ROLE_URGENCY;
  equity: ROLE_EQUITY;
  company?: Company;
  color: string;
  status: ROLE_STATUS;
  deletedAt?: Date;
  hiredAt?: Date;
  createdAt: Date;
  pausedAt?: Date;
  managerEmail?: string;
  managerName?: string;
  isExcRole?: boolean;
  recruiter?: Recruiter;
  offer?: File;
}
 

Каким-то образом он находит Recruiter и File , но Company , которое объявлено в src/types/company.d.ts :

 declare interface Company {
  companyName: string;
  companyUrl: string;
}
 

его не найдут. Я получаю сообщение об ошибке:

 src/types/role.d.ts:14:12 - error TS2304: Cannot find name 'Company'.

14  company?: Company;
              ~~~~~~~
 

По-моему tsconfig.json , у меня есть:

     "include": [
        "src/**/*.ts",
    ]
 

Что я делаю не так?

Комментарии:

1. возможно, в этой статье содержится ответ на ваш вопрос

2. Это немного сбивает с толку. Я читал, что люди отходят от typeRoots этого в пользу include всего этого

3. У вас где-нибудь объявлены директивы о тройной косой role.d.ts черте ?

4. Нет — что это значит?

5. Хм, интересно. Директива reference (в частности /// <reference types="..."> ) позволяет указать зависимость между файлами разных типов. Я подумал, что вы, возможно, пропустили ссылку company.d.ts , но вы говорите, что у вас еще нет никаких ссылок Recruiter , и File работаете.

Ответ №1:

попробуйте export interface Company вместо declare interface Company этого, может быть, решится!

Ответ №2:

Специальный комментарий указывает компилятору typescript включить другой файл определения типа

 /// <reference path="myCustomDecls.d.ts" />
 

Это следует использовать только в других .d.ts файлах

Чтобы компилятор typescript действительно признал ваши .d.ts файлы, вам также придется указать их следующим "compilerOptions" -> "typeroots" образом

 "compilerOptions": {
  "typeRoots": ["./types/"] // directory containing .d.ts-files
}
 

Если у вас несколько файлов пользовательских деклараций, я бы рекомендовал создать index.d.ts файл, включающий все ваши пользовательские .d.ts файлы, используя первый упомянутый «специальный комментарий».