Angular 7 Невозможно включить пользовательский файл определения машинописи - PullRequest
0 голосов
/ 03 декабря 2018

Я создал пользовательский файл определения машинописи (brat.d.ts)

export declare class head {
   ready(callback: () => any);
}

export declare class Util {
   static embed(divId: string, collData: any, docData: any, webFontsURLs: Array<string>);
}

Я импортирую указанный выше файл определения в компоненты Angular 7, например:

import {head, Util} from "../../brat/brat";

Когда япри обслуживании, я получаю следующую ошибку

'ОШИБКА в ./src/app/folder-mgmt/list-documents/list-documents.component.ts Модуль не найден : Ошибка: невозможно разрешить '../../brat/brat' в '\ src \ app \ folder-mgmt \ list-documents'`

Может кто-нибудь подсказать, что яделать неправильно

Ответы [ 2 ]

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

Чтобы решить эту проблему, я выполнил следующие действия:

Я удалил экспорт из моего файла пользовательского определения машинописного текста (brat.d.ts) и изменил его на

declare class head {
   static ready(callback: () => any);
}
declare class Util {
   static embed(divId: string, collData: any, docData: any, webFontsURLs: Array<string>);
}

Angular projectсозданные с помощью Angular CLI имеют корневой файл проекта в файле tsconfig.json.

Я добавил путь к папке, содержащей файл пользовательского определения, в свойстве «typeRoots» для «compilerOptions», присутствующего в файле tsconfig.json.

enter image description here

В компоненте Angular я удалил операторы импорта для импорта файла определения пользовательской машинописи (в моем случае «brat.d.ts»)

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

Вы добавляете объявления в файл .d.ts, и они становятся глобально доступными в вашем проекте.Но сначала вам нужно настроить tsconfig.json, добавив следующее:

"files": [
  "additional.d.ts"
]

Теперь создайте файл ./addition.d.ts (относительно корня проекта TypeScript) и добавьте туда свои наборы.Не export символов, а только объявляйте типы.

declare class head {
   ready(callback: () => any);
}

declare class Util {
   static embed(divId: string, collData: any, docData: any, webFontsURLs: Array<string>);
}

Теперь они будут доступны вам по всему миру.

Если вы не хотите, чтобы они были доступны по всему миру, но вы вместо этогодобавив наборы для модуля, в котором они отсутствуют, объявите их внутри модуля.

declare 'module-name' {
  // ...
}

Теперь TypeScript распознает их, когда вы выполните import { ... } from 'module-name'.

...