2015-12-14 732 views
16

我正在使用完全修補的Visual Studio 2013。我有一個我剛剛創建的網站,並試圖使用jquery,jqueryui和jsrender。我也嘗試使用TypeScript。在ts文件中,我收到如下錯誤:屬性在類型「{}」上不存在

屬性'fadeDiv'在類型'{}'上不存在。

我有正確的引用,我認爲jquery,jqueryui和jsrender打字稿..但從我讀過的這看起來像一個d.ts問題。希望有人能幫助我。

在JavaScript中沒有錯誤,但我不想讓Visual Studio說有錯誤,如果我可以幫助它。這兩次fadeDiv在javascript中都提到了它下面有一條紅線,並且這兩個錯誤都與上面相同。

感謝 香

/// <reference path="../scripts/typings/jquery/jquery.d.ts" /> 
/// <reference path="../scripts/typings/jqueryui/jqueryui.d.ts" /> 
/// <reference path="typings/jsrender/jsrender.d.ts" /> 

var SUCSS = {}; 

$(document).ready(function() { 
    SUCSS.fadeDiv(); 
}); 

SUCSS.fadeDiv = function() { 
var mFadeText: number; 
$(function() { 
    var mFade = "FadeText"; 
    //This part actually retrieves the info for the fadediv 
    $.ajax({ 
     type: "POST", 
     //url: "/js/General.aspx/_FadeDiv1", 
     url: "/js/sucss/General.aspx/_FadeDivList", 
     //data: "{'iInput':" + JSON.stringify(jInput) + "}", 
     contentType: "application/json; charset=utf-8", 
     dataType: "json", 
     error: function (xhr, status, error) { 
      // Show the error 
      //alert(xhr.responseText); 
     }, 
     success: function (msg) { 
      mFadeText = msg.d.Fade; 
      // Replace the div's content with the page method's return. 
      if (msg.d.FadeType == 0) {//FadeDivType = List 
       var template = $.templates("#theTmpl"); 
       var htmlOutput = template.render(msg.d); 
       $("[id$=lblFadeDiv]").html(htmlOutput); 
      } 
      else {//FadeDivType = String 
       $("[id$=lblFadeDiv]").html(msg.d.FadeDivString); 
      } 
     }, 
     complete: function() { 
      if (mFadeText == 0) { 
       $("[id$=lblFadeDiv]").fadeIn('slow').delay(5000).fadeOut('slow'); 
      } 
     } 
    }); 
}); 

對於那些誰可能會讀這以後..的SUCSS的命名空間。在打字稿看來我本來想要做這樣的事情。

$(document).ready(function() { 
    SUCSS.fadeDiv(); 
}); 
module SUCSS { 
    export function fadeDiv() {}; 
}; 

所以該功能通過使用出口的公開,我可以通過與SUCSS.fadeDiv呼喚出來的()調用SUCSS.fadeDiv對頁面加載運行; 希望能有所幫助。

+0

你似乎缺少至少收盤'}'梅開二度,也許還有其他的代碼。 –

+0

您需要將此代碼縮減爲一個獨立的示例,以便人們可以真正重現問題。就目前而言,你有很多使用的變量沒有定義,所以我們只能猜測它們的類型。 –

回答

0

在文件頂部附近,您需要編寫var fadeDiv = ...而不是fadeDiv = ...,以便實際聲明該變量。

錯誤「Property 'fadeDiv' does not exist on type '{}'.」似乎是在您沒有在您的示例中發佈的行上觸發的(該代碼段中的任何位置均無法訪問fadeDiv屬性)。

+0

對不起,這裏是完整的代碼...只是在示例中留下了一個命名空間,但錯誤是一樣的。錯誤發生在SUCSS.fadeDiv();在文檔加載中,也在SUCSS.fadeDiv = function(){line。 – jvcoach23

+0

這並沒有太大的改進,因爲您還沒有發佈'SUCSS'的定義... –

8

當編寫的代碼在打字稿以下行:

var SUCSS = {}; 

類型的SUCSS從分配推斷(即它是一個空的對象類型)。

你然後去屬性後添加到該類型的幾行:

SUCSS.fadeDiv = //... 

,編譯器警告你,有沒有SUCSS對象命名fadeDiv財產(這種警告經常幫助你會發現一個錯字)。

你可以......通過指定的SUCSS類型(雖然這會阻止您指定{},不滿足你想要的類型)修復:

var SUCSS : {fadeDiv:() => void;}; 

或者通過指派擺在首位的全部價值,並讓打字稿推斷類型:

var SUCSS = { 
    fadeDiv: function() { 
     // Simplified version 
     alert('Called my func'); 
    } 
}; 
+0

感謝您的明確解釋 – heroin

41

只需分配的任何類型的對象:

let bar = <any>{}; 
bar.foo = "foobar"; 
+1

解決了這個問題。在我看來,這應該是正確的答案! – SrAxi

+0

最好使用任何語法: let bar = {} as any; bar.foo =「foobar」; – eKelvin

4
let propertyName= data['propertyName']; 
2

接入領域使用數組方式來避免嚴格的類型檢查:

data['propertyName']; //will work even if data has not declared propertyName 
相關問題