2015-10-06 52 views
0

我在Chromium Embedit框架(CEF)中使用打字稿。打字稿,調用不知道TS的函數會導致紅色下劃線

現在我正在做的是我註冊C#對象並從Javascript調用它,在我的解決方案中打字。

我面臨的問題是,因爲功能和此對象不存在於TypeScript調用此函數是紅色下劃線。

我可以通過某種方式消除此調用的下劃線嗎?這種下劃線導致忽略錯誤,這不是我們想要的。

+0

您可以創建自己的絕對類型化(.d.ts)文件將包含您的類的接口或只是將您的對象投到任何 –

回答

4

現在我面對的問題是,由於功能與此對象不打字稿存在調用這個函數是紅色下劃線

你可以聲明在聲明文件中的任何全局/外部變量( .d.ts文件)。

mylib.d.ts

declare var awesome:any; 

用法theapp.ts

awesome(); // No error! 

PS:你可以在打字稿這裏https://basarat.gitbooks.io/typescript/content/docs/types/ambient/intro.html

+0

TY,這個工程!我面臨更多問題。我正在檢查某些元素的輸入類型,即fe複選框。現在我確定我有元素是複選框,所以這個元素應該檢查屬性。但是,如果我只是簡單地執行'element.checked'而不是它正在工作,但是選中了紅色下劃線。我認爲我只需要從'HTMLElement'重新輸入類似CheckboxElement的東西,但是沒有找到適合這種轉換的東西。如何擺脫這一點?我也面臨這種情況下'element.value' –

+0

任何想法如何處理? –

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

相關問題