[javascript] Typescript 오류 무시 “유형 값에 속성이 없습니다”

VS2013에서 tsc가 코드 1로 종료되면 빌드가 중지됩니다. VS2012에서는 그렇지 않았습니다.

tsc.exe 오류를 무시하면서 어떻게 솔루션을 실행할 수 있습니까?

The property 'x' does not exist on value of type 'y'자바 스크립트 함수를 사용할 때 무시하고 싶은 많은 오류가 발생합니다.



답변

질문이 이미 닫 혔음을 알고 있지만 동일한 TypeScriptException을 검색하는 것을 발견했습니다. 아마도 다른 사람 이이 문제를 검색 하여이 질문에 부딪쳤을 수 있습니다.

문제는 누락 된 TypeScript 입력에 있습니다.

var coordinates = outerElement[0].getBBox();

던지기 The property 'getBBox' does not exist on value of type 'HTMLElement'.

가장 쉬운 방법은 다음과 같이 변수를 명시 적으로 입력하는 것입니다. any

var outerHtmlElement: any = outerElement[0];
var coordinates = outerHtmlElement.getBBox();

2016 년 말 편집

TypeScript 1.6이 선호하는 캐스팅 연산자이기 때문에 as이러한 행을 우아하게 만들 수 있습니다.

let coordinates = (outerElement[0] as any).getBBox();


다른 솔루션

물론 때로는 과잉 인 올바른 작업을 원한다면 다음을 수행 할 수 있습니다.

  1. 단순히 확장되는 자체 인터페이스 만들기 HTMLElement
  2. 자신 만의 타이핑을 소개합니다 HTMLElement

답변

빠르고 더러운 해결책은 명시 적으로 캐스팅하는 것입니다. any

(y as any).x

“장점”은 캐스트가 명시 적이므로 noImplicitAny플래그가 설정되어 있어도 컴파일된다는 것 입니다.

올바른 해결책은 타이핑 정의 파일을 업데이트하는 것입니다.

당신이 변수를 캐스팅 할 때, 유의하시기 바랍니다 any, 당신이 탈퇴 해당 변수에 대한 유형 검사의.


고지 사항 모드에 any있으므로 새 인터페이스와 결합 된 이중 캐스팅 은 사용자가 상황에 유용 할 수 있습니다.

  • 깨진 타이핑 파일을 업데이트하고 싶지 않습니다
  • 원숭이 패치입니다

그러나 여전히 어떤 형태의 타이핑을 원합니다.

당신의 인스턴스의 정의를 패치 할 것인지 말 y유형의 OrginalDef새로운 속성 x유형을 number:

const y: OriginalDef = ...

interface DefWithNewProperties extends OriginalDef {
    x: number
}

const patched = y as any as DefWithNewProperties

patched.x = ....   //will compile


답변

다음과 같은 트릭을 사용할 수도 있습니다.

y.x = "some custom property"//gives typescript error

y["x"] = "some custom property"//no errors

액세스 x하고 typescript 오류를 다시 얻지 않으려면 y["x"], not 으로 작성해야합니다 y.x. 따라서이 관점에서 다른 옵션이 더 좋습니다.


답변

이 문제를 처리하는 방법에는 여러 가지가 있습니다. 이 객체가 일부 외부 라이브러리와 관련이있는 경우 가장 좋은 해결책은 해당 라이브러리에 대한 실제 정의 파일 (큰 저장소 here ) 을 찾아서 참조하는 것입니다. 예 :

/// <reference path="/path/to/jquery.d.ts" >

물론 이것은 많은 경우에 적용되지 않습니다.

유형 시스템을 ‘재정의’하려면 다음을 시도하십시오.

declare var y;

이렇게하면 원하는 전화를 걸 수 있습니다 var y.


답변

TypeScript가 “y”“x” 속성 이 존재하지 않는다고 생각하면 “y”를 “any”로 캐스트 할 수 있으므로 “y”에서 “x”와 같은 것을 호출 할 수 있습니다.

이론

(<any>y).x;

실제 예

이 코드에 대한 “TS2339 : ‘name’속성이 ‘Function’유형에 없습니다. ‘오류가 발생했습니다.

let name: string = this.constructor.name;

그래서 나는 그것을 고쳤다.

let name: string = (<any>this).constructor.name;


답변

Angular2에 문제가 있었지만 로컬 저장 장치를 사용하여 무언가를 저장하고 있었기 때문에 불가능합니다.

솔루션 :

나는했다 localStorage.city -> error -> Property 'city' does not exist on type 'Storage'.

해결 방법 :

localStorage [ ‘도시’]

(localStorage). 도시

(로컬 스토리지)


답변

아무것도 작동하지 않는 빠른 수정 :

const a.b = 5 // error

const a['b'] = 5 // error if ts-lint rule no-string-literal is enabled

const B = 'b'
const a[B] = 5 // always works

모범 사례는 아니지만 문자열없는 리터럴을 끄지 않고도 솔루션을 제공합니다.