Машинопись на экспорт в JavaScript - PullRequest
3 голосов
/ 12 июня 2019

У меня есть образцы машинописных объектов как

declare const S3 = "https://s3.amazonaws.com/xxx/icons";
declare const SVG = "svg-file-icons";

declare interface MyIcons {
  "image/jpeg": string;
  "image/jpg": string;
}

export const FILE_ICONS_SVG: MyIcons = {
  "image/jpeg": `${S3}/${SVG}/jpg.svg`,
  "image/jpg": `${S3}/${SVG}/jpg.svg`
};

Я объявляю этот объект в общем пакете NPM для обеспечения согласованности во всех моих проектах. Но компиляция TSC дает мне что-то вроде этого.

"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.FILE_ICONS_SVG = {
    "image/jpeg": `${S3}/${SVG}/jpg.svg`,
    "image/jpg": `${S3}/${SVG}/jpg.svg`
};

Поскольку очевидно, что S3 и SVG не определены в скомпилированном файле js и, следовательно, выдают ошибки при использовании.

Как это можно исправить ??

1 Ответ

2 голосов
/ 12 июня 2019

Использование declare на самом деле не «объявляет» что-либо.

declare используется только для того, чтобы сообщить системе типов , что что-то с объявленными именем и типом существует.

Если вы хотите определить постоянную, которая должна существовать вне системы типов , то есть существовать во время выполнения, вы должны удалить ключевое слово Declare.

declare вещи не влияют на время выполнения

Почему существует declare?

Если вы думаете о том, как работает Интернет, у вас есть HTML-файл,В этот HTML вы можете включить скрипты.Эти сценарии могут быть полностью независимы друг от друга, но также использовать материал из других сценариев.

Так что если у вас есть один файл, который прикрепляет что-то к window, например, в одном файле, и есть другой файл, который затемиспользует этот объект, система типов typecript не может знать, что этот объект существует, поэтому вы можете сообщить системе типов о его существовании, используя declare


Так что это должно быть

const S3 = "https://s3.amazonaws.com/xxx/icons";
const SVG = "svg-file-icons";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...