如何禁用TypeScript类声明导入的输出

如何禁用TypeScript类声明导入的输出,typescript,Typescript,设置: 我正在为其他一些外部API编写TypeScript定义。我为这样一个类创建了def: // script.js Object.defineProperty(exports, "__esModule", { value: true }); var external_1 = require("./external"); var myObject = new external_1.MyClass(); //external.d.ts 导出声明类MyClass{…} 然后,我创建了一个脚本,

设置:

我正在为其他一些外部API编写TypeScript定义。我为这样一个类创建了def:

// script.js
Object.defineProperty(exports, "__esModule", { value: true });
var external_1 = require("./external");
var myObject = new external_1.MyClass();
//external.d.ts
导出声明类MyClass{…}
然后,我创建了一个脚本,该脚本设计用于此外部API:

//script.ts
从“/external.d.ts”导入{MyClass};
const myObject=new MyClass();
我生成的JavaScript如下所示:

// script.js
Object.defineProperty(exports, "__esModule", { value: true });
var external_1 = require("./external");
var myObject = new external_1.MyClass();
问题:

如何使输出看起来像这样(外部的no
require()
):

就这一点而言,我如何摆脱
对象。也定义…
输出:

// script.js
var myObject = new MyClass();

更新:

出于某种原因,我的tsconfig.json在我的“src”文件夹中排除了“*.d.ts”。这个问题,再加上在环境上下文中声明globals,完全解决了我的问题。我能够在不导入的情况下引用全局变量和类型,并且我的脚本在编译时不需要额外的东西

与@aluan haddad的讨论以及这一点提供了解决这一问题的必要词汇:

因此,现在我的打字脚本看起来可以这么简单:

//script.ts
接口MySchema{…};
const myObject=new MyClass();
…我的JS就像我想要的:

//script.js
var myObject=new MyClass();
之前:

我用接口替换了
export declare class
,并在
script.js
中声明了我的类:

//script.ts
从'./external.d.ts'导入{MyInterface};
声明类MyClass{
构造函数();
}
const myObject=new MyClass()作为MyInterface;

…并根据需要输出。然而,可能有一种比暴力施法更好的方法。

import
以模块系统为前提<代码>要求(
--module commonjs
)是typescript默认发出的。如果您试图将基于模块的应用程序构建到全局脚本中,您可以使用各种方法(如UMD),也可以使用其他构建工具(如Rollup)。这与声明文件无关,它与导入和导出有关。我认为我对“类”是JavaScript而不是TypeScript的混淆也是一个原因。我不确定我是否理解为什么“declare class”会从
script.ts中删除,但在导入时不会删除。这是一个彻底的行为改变,由于缺少显式的TypeScript配置,您不应该轻率地这样做。发生这种情况的原因是编译器忽略了仅在类型位置使用的导入。最后,问题是:是否有一个文件
/external.js
可以导出任何东西?如果
MyClass
是一个全局变量,那么您的错误是导出它否没有
external.js
,只有
.d.ts
。我正在使用外部API的文档编写DEF。然后,我生成的输出将被合并到外部应用程序中,该外部应用程序的全局上下文包括
MyClass
。然后,您将错误地编写定义并使用它们。如果要为全局变量编写定义,则定义必须是全局的。这意味着您既不导入也不导出它们。是否可以将
声明const/class which
放在另一个文件中,并在
script.ts
中使用它?或者你所说的“全球定义”是指其他的东西?这就是我的意思,是的。只要有一个文件
declare class X{}
在一个文件中有
import
export
,它的含义就会从脚本到模块完全改变。而且,最重要的是,由于您正试图编写全局代码,因此在
tsconfig.json
中指定
“模块”:
“编译器选项”
下的“无”
,这样编译器就不会让您使用
导入
/
导出
。这确实值得一做。否则你会发疯的。