programing

TypeScript: 유형 '{}'에 속성이 없습니다.

magicmemo 2023. 4. 6. 21:30
반응형

TypeScript: 유형 '{}'에 속성이 없습니다.

Visual Studio 2013을 완전 패치 적용으로 사용하고 있습니다.JQuery, JQueryUI, JSRender를 사용하려고 합니다.저도 TypeScript를 사용하려고 합니다.ts 파일에서 다음과 같은 오류가 발생합니다.

유형 '{}'에 속성 'fadeDiv'가 없습니다.

JQuery, JQueryUI 및 JSRender의 TypeScript에 대한 올바른 레퍼런스를 가지고 있다고 생각합니다만, 읽어본 바로는 d.ts의 문제인 것 같습니다.

JavaScript에는 오류가 없지만, Visual Studio에서 가능하면 오류가 있다고 말하는 것을 원하지 않습니다.두 번 다fadeDivJavaScript에서 언급되고 있는 것은 빨간색 줄이 그 아래에 있고 두 오류 모두 위와 같은 것을 나타냅니다.

/// <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();그게 도움이 됐으면 좋겠어요.

를 할당할 수 있습니다.any오브젝트에 입력합니다.

let bar: any = {};
bar.foo = "foobar"; 

단일 필드에 대한 엄격한 유형 확인을 피하기 위해 배열 표기를 사용하여 필드에 액세스합니다.

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

다른 방법으로는 싱글액세스의 변수를 (언캐스팅 하는) 방법이 있습니다.

(<any>data).propertyName;//access propertyName like if data has no type

첫 번째는 짧고, 두 번째는 유형(비) 캐스팅에 대해 더 명확합니다.


모든 변수 필드에 대한 유형 확인을 완전히 비활성화할 수도 있습니다.

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

주의: 모든 필드의 모든 연속된 액세스는 입력되지 않으므로 단일 필드 액세스에 대한 유형 확인을 피하는 것보다 더 위험합니다.

let propertyName = data['propertyName'];

TypeScript에서 다음 코드 행을 작성할 경우:

var SUCSS = {};

의 종류SUCSS는 할당에서 추론됩니다(즉, 빈 객체 유형).

그런 다음 몇 줄 후에 이 유형에 속성을 추가합니다.

SUCSS.fadeDiv = //...

컴파일러는 다음과 같은 이름의 속성은 없다고 경고합니다.fadeDiv에서SUCSS오브젝트(이러한 경고는 오타를 잡는 데 도움이 되는 경우가 많습니다).

당신은 할 수 있다...유형을 지정함으로써 그것을 고치다SUCSS(다만, 이 조작으로 인해,{}(필요한 타입을 만족시키지 못합니다).

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

또는 처음부터 전체 값을 할당하고 TypeScript에서 유형을 추론하도록 합니다.

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

다음과 같은 변경을 제안합니다.

let propertyName =  {} as any;

부분 유틸리티 유형을 사용하여 모든 개체 속성을 옵션으로 만들 수 있습니다.https://www.typescriptlang.org/docs/handbook/utility-types.html#partialtype

type Foo = {
  bar: string;
}

const foo: Partial<Foo> = {}
foo.bar = "foobar"
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;
      }

맨 에는 이렇게 요.var fadeDiv = ...fadeDiv = ...변수가 실제로 선언되도록 합니다.

Property 'fadeDiv' does not exist on type '{}'.는 것 할 수 .fadeDiv속성)을 지정합니다.

var SUCSS = {};의 종류를 암묵적으로 SUCSS속성을 가지지 않는 개체로 사용합니다.옵션 속성을 허용하려면 해당 유형을 명시적으로 정의해야 합니다.

type SUCESSType = {
    fadeDiv?: () => void;
};

const SUCSS: SUCESSType = {};

that긴 fadeDiv는 그 직후에 정의되기 때문에 속성을 옵션으로 할 필요는 없습니다(이 경우 속성을 호출하기 전에 속성이 존재하는지 테스트해야 합니다).

개체를 만들 때 함수를 할당할 수 있습니다.

const SUCSS = {
    fadeDiv = function () { /* function body */ }
};

언급URL : https://stackoverflow.com/questions/34274487/typescript-property-does-not-exist-on-type

반응형