我有一个示例类型记录对象,如
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文件中定义的,因此在使用上会出现错误。
这是怎么解决的??
发布于 2019-06-12 08:31:44
使用declare并不能真正“声明”某件事情。
declare只用于告诉类型-system存在具有声明名称和类型的东西。
如果您想要定义一个应该存在于类型系统之外的常量,也就是在运行时存在,则必须删除关键字。
declared对运行时没有任何影响。
为什么declare存在?
如果考虑到网络是如何工作的,就会有一个html文件。在这个html中,您可以包含脚本。这些脚本可能完全独立于其他脚本,但也使用其他脚本中的内容。
因此,如果有一个文件(例如在一个文件中)附加到window,而另一个文件随后使用该对象,那么类型记录类型系统无法知道该对象的存在,因此可以使用declare来告诉类型系统它的存在。
所以应该是
const S3 = "https://s3.amazonaws.com/xxx/icons";
const SVG = "svg-file-icons";https://stackoverflow.com/questions/56557724
复制相似问题