javascript - cefsharp webview 界面的 typescript 定义

标签 javascript typescript interface definition cefsharp

我在 CefSharp ChromiumWebBrowser 中注册了一个 RegisterAsyncJsObject。这会在 Web 浏览器中创建一个额外的 JavaScript 对象实例,如下所示:

frame.openWindow(name, data);
frame.navigateToWindow(name, data);

它与纯 JavaScript 配合得很好。我能够访问该对象,并且这些方法可以完成其工作。

现在我想使用 TypeScript 对该对象进行编程,但 TypeScript 编译器不知道该对象的类型。我尝试创建该对象的类型定义文件,但它实际上不起作用。看来如果我导入定义/声明,无论如何,它都会覆盖“框架”对象。

你知道如何在 TypeScript 中使用该对象吗?

我真的需要该对象的类型定义吗?它到底是如何运作的?

到目前为止,我只是使用 TypeScript 并完成了类型定义,但没有自己创建定义。

最佳答案

如果 frame 尚无现有类型,您可以定义自己的类型:

interface MyFrame {
    //fill in the `any` and `void` types as appropriate
    openWindow(name: any, data: any): void; 
    navigateToWindow(name: any, data: any): void;
}

//if frame is initialized somewhere else:
declare let frame: MyFrame;

//if you want to initialize it here:
let frame: MyFrame = //some initialization code

如果 frame 具有现有类型,例如 lib.d.ts 中的 HTMLFrameElement,那么您可以添加一个附加接口(interface)来扩展现有的一个。这称为 declaration merging :

interface HTMLFrameElement {
    openWindow(name: any, data: any): void; 
    navigateToWindow(name: any, data: any): void;
}

这可以在常规 Typescript 文件 (.ts) 或定义文件 (.d.ts) 中完成。

<小时/>

您可以在当前文件中包含接口(interface)+声明,这应该允许您使用这些方法。如果要将其放置在外部文件中,并且为了让编译器了解该文件,请执行以下操作之一:

  • 将其包含在项目的 tsconfig.json
  • 使用 import "/myfile" 将其导入到每个引用文件中

关于javascript - cefsharp webview 界面的 typescript 定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42284778/

相关文章:

typescript - 联合类型作为界面中的关键?

typescript - 适用于浏览器和移动设备的 Ionic 2 Storage

c# - 在实现中用派生类覆盖接口(interface)方法返回类型

typescript - 类型 ... 不可分配给类型 'never' .(2322)

c# - 如何强制继承类在 C# 中实现静态方法?

java - 在实现中使用接口(interface)类型与公共(public)接口(interface)

javascript - 在 Open Layers 3 中向矢量源添加圆

javascript - Nodejs获取不到返回值?

javascript - 为什么 setColWidth 在 Jqgrid 上不起作用?

javascript - 如何使用缩略图和箭头创建图片库