首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >类型输出到Javascript输出

类型输出到Javascript输出
EN

Stack Overflow用户
提问于 2019-06-12 08:26:28
回答 1查看 68关注 0票数 3

我有一个示例类型记录对象,如

代码语言: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编译给了我这样的东西。

代码语言:javascript
复制
"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文件中定义的,因此在使用上会出现错误。

这是怎么解决的??

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-12 08:31:44

使用declare并不能真正“声明”某件事情。

declare只用于告诉类型-system存在具有声明名称和类型的东西。

如果您想要定义一个应该存在于类型系统之外的常量,也就是在运行时存在,则必须删除关键字。

declared对运行时没有任何影响。

为什么declare存在?

如果考虑到网络是如何工作的,就会有一个html文件。在这个html中,您可以包含脚本。这些脚本可能完全独立于其他脚本,但也使用其他脚本中的内容。

因此,如果有一个文件(例如在一个文件中)附加到window,而另一个文件随后使用该对象,那么类型记录类型系统无法知道该对象的存在,因此可以使用declare来告诉类型系统它的存在。

所以应该是

代码语言:javascript
复制
const S3 = "https://s3.amazonaws.com/xxx/icons";
const SVG = "svg-file-icons";
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56557724

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档