属性' {}'

时间:2015-12-14 18:53:14

标签: typescript

我正在使用Visual Studio 2013完全修补。我有一个我刚刚创建的网站,我正在尝试使用jquery,jqueryui和jsrender。我也在尝试使用TypeScript。在ts文件中,我收到如下错误

  

财产' fadeDiv'类型' {}'。

上不存在

我认为jquery,jqueryui和jsrender对于打字稿有正确的引用..但是从我所看到的这看起来像是一个d.ts问题。希望有人可以帮助我。

javascript中没有错误,但我不想让Visual Studio说如果我可以提供帮助就会出现错误。两次fadeDiv都在javascript中提到它下面有一条红线,两个错误都跟上面说的一样。

感谢 香农

for (int i = 0; i < GridView1.Rows.Count; i++)
{
    f_name = ((TextBox)GridView1.Rows[i].FindControl("TextBox1"));
    l_name = ((TextBox)GridView1.Rows[i].FindControl("TextBox2"));
    contacts = ((TextBox)GridView1.Rows[i].FindControl("TextBox3"));

    Console.WriteLine(f_name.Text);

    if (f_name != null)
    {
        string query = string.Format("insert into [StudentsData].[dbo].[Student_Info] values('{0}','{1}','{2}')", f_name.Text, l_name.Text, contacts.Text);
        command.CommandText = query;

        try
        {
            conn.Open();
            command.ExecuteNonQuery();

            Label1.Text = f_name.Text.Trim();
        }
        finally
        {
            conn.Close();
        }
    }
}

对于那些可能会在稍后阅读此内容的人... SUCSS命名空间..在打字稿中看起来我会想要做这样的事情。

/// <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.fadeDiv()调用它来调用SUCSS.fadeDiv在页面加载上运行; 希望能有所帮助。

7 个答案:

答案 0 :(得分:83)

只需将任何类型分配给对象:

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

答案 1 :(得分:21)

使用数组表示法访问字段,以避免对单个字段进行严格的类型检查:

data['propertyName']; //will work even if data has not declared propertyName

您还可以完全禁用所有变量字段的类型检查:

let untypedVariable:any= <any>{}; //disable type checking while declaring the variable
untypedVariable.propertyName = anyValue; //any field in untypedVariable is assignable and readable without type checking

注意:这比仅针对单个字段访问避免类型检查更危险,因为所有字段上的所有连续访问都是无类型的

答案 2 :(得分:12)

在TypeScript中编写以下代码行时:

var SUCSS = {};

SUCSS的类型是从赋值中推断出来的(即它是一个空对象类型)。

然后你继续在几行后添加一个属性:

SUCSS.fadeDiv = //...

编译器警告你fadeDiv对象上没有名为SUCSS的属性(这种警告通常可以帮助你捕捉错字)。

您可以通过指定SUCSS的类型来修复它(虽然这会阻止您分配{},但这并不能满足您想要的类型:

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

或者通过首先分配完整值并让TypeScript推断出类型:

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

答案 3 :(得分:12)

let propertyName= data['propertyName'];

答案 4 :(得分:2)

我建议进行以下更改

let propertyName =  {} as any;

答案 5 :(得分:0)

在文件顶部附近,您需要编写var fadeDiv = ...而不是fadeDiv = ...,以便实际声明变量。

错误&#34; Property 'fadeDiv' does not exist on type '{}'.&#34;似乎是在您的示例中未发布的行上触发(该代码段中的任何位置都无法访问fadeDiv属性)。

答案 6 :(得分:0)

myFunction(
        contextParamers : {
            param1: any,
            param2: string
            param3: string          
        }){
          contextParamers.param1 = contextParamers.param1+ 'canChange';
          //contextParamers.param4 = "CannotChange";
          var contextParamers2 : any = contextParamers;// lost the typescript on the new object of type any
          contextParamers2.param4 =  'canChange';
          return contextParamers2;
      }