我在Chromium Embedit框架(CEF)中使用typescript。
现在我正在做的是我正在注册C#对象并在我的解决方案中使用Javascript调用它。
我面临的问题是,由于函数和此对象在TypeScript调用中不存在,因此该函数带有红色下划线。
我可以以某种方式摆脱这个呼叫的下划线吗?这下划线会导致忽略错误,这不是我们想要的。
答案 0 :(得分:4)
现在我面临的问题是,由于函数和此对象在TypeScript调用中不存在,因此该函数带有红色下划线
您可以在声明文件(.d.ts
文件)中声明任何全局/外部变量。
E.g mylib.d.ts
declare var awesome:any;
用法theapp.ts
:
awesome(); // No error!
PS:您可以在https://basarat.gitbooks.io/typescript/content/docs/types/ambient/intro.html
中阅读有关TypeScript氛围的更多信息答案 1 :(得分:0)
我会这样说 - 有an example in the playground
首先是问题
// plain object
var obj = {};
// TS is doing the best for us.
// it informs about the issues related to
// unknown properties and methods on a type <any>
obj.Result = obj.ReLoad(obj.IdProperty);
介绍界面
module MyNamespace {
export interface IObject {
IdProperty: number;
Result: string;
ReLoad: (id: number) => string;
}
}
解决方案:
// I. Declare type, and implement interface
// if we can declare a type
var obj1: MyNamespace.IObject;
// and later create or get that object
export class MyObj implements MyNamespace.IObject{
IdProperty: number;
Result: string;
ReLoad = (id: number) => {return id.toString()};
}
// now we get the implementation
obj1 = new MyObj();
// TS knows what could do with the obj2
// of type
obj1.Result = obj1.ReLoad(obj1.IdProperty);
// II. ASSERT - let TS know what is the type behind
// Assert - say to TS:
// I know that this object is of the expected type
var obj2 = <MyNamespace.IObject>obj;
// now TS is happy to trust that tese properties exist
obj2.Result = obj2.ReLoad(obj2.IdProperty);
检查here