Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在typescript中断言导入的类?_Typescript - Fatal编程技术网

如何在typescript中断言导入的类?

如何在typescript中断言导入的类?,typescript,Typescript,我需要在typescript ES6模块中导入一个不存在的类(当实际使用时,该类将存在)。我希望可以这样扩展: /打字/事件d.ts: 导出接口事件{ $on(事件:字符串,侦听器:()=>{}):void; $once(事件:字符串,侦听器:()=>{}):void; $off(事件:字符串,侦听器:()=>{}):void; $emit(事件:字符串):无效; } 梅因酒店 从“/typings/events.d.ts”导入{IEvents}; //@ts ignore:ignore暂时不

我需要在typescript ES6模块中导入一个不存在的类(当实际使用时,该类将存在)。我希望可以这样扩展:

/打字/事件d.ts:

导出接口事件{
$on(事件:字符串,侦听器:()=>{}):void;
$once(事件:字符串,侦听器:()=>{}):void;
$off(事件:字符串,侦听器:()=>{}):void;
$emit(事件:字符串):无效;
}
梅因酒店

从“/typings/events.d.ts”导入{IEvents};
//@ts ignore:ignore暂时不存在的模块
从“../../common/base/Events”导入事件;
事件作为事件//类似的东西…只是为了断言这个类
类监视器扩展事件实现IEvents{
构造函数(){
超级();
//所以我可以直接调用这个.$on,这个.$off..等等。
}
}
但是,我总是收到错误消息“类型‘Monitor’缺少类型‘IEvents’的以下属性:$on、$one、$off、$emit”

有没有合适的方法来实施它?提前谢谢!:D

编辑:


我尝试在导入事件变量后重新声明它(请参见),但它不起作用。重新声明后,导入行将被丢弃。

如果您在其他地方编写了代码,但希望TypeScript了解,则需要。通常您会将它们放在它们自己的专用库文件中,但也可以使用do内联声明

例如,您可以将其声明为
,但还需要声明其属性/方法:

declare class Events implements IEvents {
    $on(event: string, listener: () => {}): void;
    $once(event: string, listener: () => {}): void;
    $off(event: string, listener: () => {}): void;
    $emit(event: string): void;
}
或者您可以声明它是一个类型和一个值,其中该类型对应于类的实例端,该值表示包括构造函数在内的静态端。这通常在标准库中完成,您将看到类似于
Foo
类型和
FooConstructor
类型的内容,以及类型为
FooConstructor
的名为
Foo
的变量。(例如,对于实例端的
Array
,对于静态端,以及显示有一个名为
Array
的对象充当构造函数)。以下是如何为
事件执行此操作:

interface Events extends IEvents { }
declare const Events: new () => IEvents;
这两个都适合你。希望有帮助;祝你好运


你好,jcalz我真的很感谢你明确的回答!太多了!然而,我的情况在这里有点棘手..我需要首先从'some/where/doesnt/exist'导入一个不存在的变量
import事件,因此我以后无法重新计算它,否则此导入行将被丢弃…我知道我的代码中一定发生了异常情况!您可以将声明放在dev环境中
some/where/doesnt/exist/index.d.ts
的文件中吗?或者放在编译器可以放在的任何地方吗?是的,我可以将接口/事件类放在
some/where/index.d.ts
中,它可以全局工作。但是我需要注释掉'some/where/doesnt/exist.js'中的
导入事件行,否则此事件(==未定义)将覆盖globalwide事件接口。问题是编译器找不到“some/where/doesnt/exist.js”。。编译器不需要找到.js文件,它只需要找到.d.ts文件。只有运行时环境才应该关心js,js大概会在那里。你能把你的代码编辑成一个文件吗?这样我就可以看到你在我自己的IDE中看到的东西了?或者可能会发布一个stackblitz/codesandbox链接来说明这个问题(顺便说一句,你的游乐场链接坏了)?我无法复制它。