2016-09-16 2 views
2

저는 TypeScript의 초보자입니다. Object의 데이터에 액세스 할 때 약간 문제가있었습니다.개체 리터럴의 속성에 액세스 할 때 TypeScript 오류가 발생했습니다.

let content:Array<string> = ["I", "am", "a", "beginner"] 
let data:Object = {a: "foo", b: content} 
console.log(data.a); 
console.log(data['b']); 
console.log(data.b); 

이 코드는 라인 (5)의 오류 (자바 스크립트에 오류) 가, 나에게 그것을 설명하십시오있을 것이다. 도움 주셔서 감사합니다.

+0

당신은 – DAXaholic

+0

을 통과 15 분 등 (녹색 체크 마크를 통해) 답을 받아 들일 수 어떻게 답변을 받아 들일 수 있는가? (미안 해요, 초보자입니다) –

+0

미안하다고 생각할 이유가 없습니다 - http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work – DAXaholic

답변

2

그냥 그래서 타이프 라이터 즉, 유형을 추론 초기 코드에서 오류이

let content:Array<string> = ["I", "am", "a", "beginner"] 
let data = {a: "foo", b: content} 
console.log(data.a); 
console.log(data['b']); 
console.log(data.b); 

이유 같은 것을로 변경됩니다 Object의 수 data의 명시 적 선언을 제거하는 것은 형식 문자열 ObjectObject이거나 그 형식의 파생 클래스 인 TypeScript 컴파일러에 - 형식 Objecta 또는 b이 없으므로이 오류가 발생합니다.

명시 적 유형의 주석을 제거하면 여전히이 경우 타이프 라이터와 같이 AD.Net에 의해 제안 사용할 수있는 모든 유형의 정보가로 any을 사용하는 것과 동일하지 않습니다 있습니다 - 단지 유추 (Visual Studio를 코드의 스크린 샷 참조)에 의해 반면, any을 사용하면 TypeScript 컴파일러에서 변수가 형식 검사를하지 않는 항목을 참조 할 수 있다고 알립니다.

enter image description here

+0

도움을 주셔서 대단히 감사합니다. 나는 그것에 대해 이해했다. :) –

+0

초기 할당이 작동하는 이유는 TS가 ** 추가 ** 속성을 무시한다는 것입니다. –

+0

#DAXaholic 확실한 경우, 가능한 경우 귀하의 답변에 투표하겠습니다. –

0

data:any을 할당 할 수 있습니다. 적어도 오류는 발생하지 않습니다. 인텔리 센스를 원한다면 data에 대해 type/interface을 만들어야합니다.

interface myData{ 
    a:string; 
    b:Array<String> 
} 
data:myData 

당신은 인텔리 센스를 가질 수 있습니다. 당신이 있기 때문에

+0

도움 주셔서 감사합니다. 인터페이스 작동이 좋습니다. –