cefsharp webview接口的Typescript定义

时间:2017-02-16 21:15:45

标签: javascript typescript interface definition cefsharp

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

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

使用纯JavaScript可以很好地工作。我能够访问这个对象,这些方法可以完成它们的工作。

现在我想用TypeScript对这个对象进行编程,但是TypeScript编译器并不知道该对象的类型。我试图创建该对象的类型定义文件,但它并没有真正起作用。看来,如果我导入一个定义/声明,那么它将覆盖'框架'对象

您是否知道如何在TypeScript中使用该对象?

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

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

1 个答案:

答案 0 :(得分:2)

如果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具有现有类型,例如HTMLFrameElement中的lib.d.ts,则可以添加其他界面以扩展现有类型。这称为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"
  • 将其导入每个引用文件