У меня есть следующая простая функция-конструктор:

constructor() {
    const myTextAlign: CanvasTextAlign = 'center';
    const myHTMLDoc: HTMLDocument = null;
    console.log(myTextAlign);
}

VS Code сообщает об отсутствии проблем с кодом, и если я нажимаю CanvasTextAlign или HTMLDocument и нажимаю F12, он правильно переводит меня в lib.dom.d.ts. Однако, когда я пытаюсь запустить ng build, компилятор Angular выдает следующую ошибку:

error TS2304: Cannot find name 'CanvasTextAlign'.

Он никогда не сообщает об ошибке для HTMLDocument, поэтому кажется, что он может найти некоторые определения в lib.dom.d.ts, но не все из них.

Tsconfig.json выглядит так:

{
  "compileOnSave": false,
  "compilerOptions": {
    "baseUrl": "./",
    "outDir": "./dist/out-tsc",
    "sourceMap": true,
    "declaration": false,
    "module": "es2015",
    "moduleResolution": "node",
    "emitDecoratorMetadata": true,
    "experimentalDecorators": true,
    "target": "es6",
    "typeRoots": [
      "node_modules/@types"
    ],
    "lib": [
      "es6",
      "dom"
    ]
  }
}

Tsconfig.app.json выглядит так:

{
  "extends": "../tsconfig.json",
  "compilerOptions": {
    "outDir": "../out-tsc/app",
    "types": []
  },
  "exclude": [
    "test.ts",
    "**/*.spec.ts"
  ]
}

Оба файла json являются ванильными версиями, которые были созданы при запуске ng new.

2
Jonathan Smith 12 Ноя 2018 в 15:39

1 ответ

Лучший ответ

Вы должны указать angular, какой CanvasTextAlign вы имеете в виду.

Используйте что-то вроде этого в верхней части ts файла контроллера:

import {CanvasTextAlign} from 'mylibrary';

И убедитесь, что эта библиотека находится в вашем каталоге node_modules.

HTMLDocument, с другой стороны, не нуждается в таком импорте, он является частью самого angular.

1
slartidan 12 Ноя 2018 в 13:58