javascript - Typescript 到 Javascript 导出
问题描述
我有一个示例打字稿对象
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 文件中定义,因此在使用时会出错。
这个怎么解决??
解决方案
使用declare
并没有真正“声明”某些东西。
declare
仅用于告诉类型系统具有声明的名称和类型的东西存在。
如果你想定义一个应该存在于类型系统之外的常量,也就是在运行时存在,你必须删除 declare 关键字。
declare
'd 事情对运行时没有任何影响
为什么declare
存在?
如果您考虑 Web 的工作原理,那么您有一个 html 文件。在该 html 中,您可以包含脚本。这些脚本可能彼此完全独立,但也使用来自其他脚本的东西。
因此,如果您有一个文件将某些内容附加到window
例如一个文件中,并且有另一个文件然后使用该对象,则打字稿类型系统无法知道该对象是否存在,因此您可以告诉类型系统通过使用它的存在declare
所以应该是
const S3 = "https://s3.amazonaws.com/xxx/icons";
const SVG = "svg-file-icons";
推荐阅读
- django - Django CMS 如何写博客
- android - 如何在 Unity 中使用 Google 帐户对用户进行身份验证?
- xaml - TabView 的子项中触发了哪些事件?
- angular - 您如何为 Angular 8 中的 HTML5 画布动态设置 clientHeight 和 clientWidth?
- modelica - 搜索 Modelica.Userguide
- php - 如何将 laravel 项目从本地部署到服务器
- android - 实现下拉菜单项颤动的复选框
- python - 如何删除“amp;” 使用 Python 将 html 转换为文本时出现一些错误字符?
- sql - Postgres:物化视图刷新时间比创建时间长
- java - 如何在我的 try catch 中重定向到我的错误视图?