2015-12-14 199 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 
相关问题