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();
다른 솔루션
물론 때로는 과잉 인 올바른 작업을 원한다면 다음을 수행 할 수 있습니다.
- 단순히 확장되는 자체 인터페이스 만들기
HTMLElement
- 자신 만의 타이핑을 소개합니다
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
모범 사례는 아니지만 문자열없는 리터럴을 끄지 않고도 솔루션을 제공합니다.