2016-08-22 2 views
2

개체 리터럴을 사용할 때 Typescript 설명서에 따르면 인터페이스와 정확히 일치해야합니다. 다음 코드 놀이터는 오류 메시지가 표시되지 않습니다뿐만 : 그것은 인덱스가 숫자를해야 그 인덱스 번호와 값을해야 의미 [index: number]: number과 충돌 그래서 여기 Typescript 컴파일러가 오류를 표시하지 않음

code pic from playground

는 소품

를 들어, 문자열 nameage 이외의 속성

버그입니까? 내가 틀렸다면 이것이 어떻게 작동하는지 설명해주십시오.

+2

코드 이미지를 게시하지 마십시오. –

+0

놀이터에서 오류가 표시되지 않았다는 사실을 지적하기 위해 게시했습니다. –

+0

놀이터 예에 대한 링크를 생성하는 것은 매우 쉽습니다. 이렇게하면 사람들이 귀하의 질문에 대답하려고하면 코드를 신속하게 확인할 수 있습니다. 그렇지 않으면 여기에 코드를 붙여 넣기 만하면되므로 검토자가 컴파일하려고 시도 할 수 있으므로 항상 그림 대신 더 나은 대안입니다. –

답변

1

인터페이스에 필요한 것보다 더 많은 속성을 지정할 수 있습니다. 그들이 좋은 일이다 "암시 인덱스 서명"을하기로 결정하기 때문에 (or on the playground)

// index.ts 
interface MyInterface { 
    obligatoryProperty: string 
    optionalProperty?: string 
    [index: number]: number 
} 

let impl1: MyInterface = {} // fails compilation 
let impl2: MyInterface = { obligatoryProperty: 'hello' } // compiles fine 
let impl3: MyInterface = { 
    obligatoryProperty: 'hello', 
    optionalProperty: 'hello', 
    2: 2, 
    3: 3, 
    notSpecifiedPropertyThatIsAlsoNotANumber: 'hello', 
} // Still fine 
0

: 데모,이 코드를 보라! 여기 이유에 대해 읽을 수 있습니다 : 당신이 키로 number과 가치 등 비 number이있는 속성을 만들 경우

https://github.com/Microsoft/TypeScript/issues/7059

그러나는 타이프 스크립트 컴파일러에 오류가 표시됩니다. Here is an example in the playground.

참고 : TypeScript는 가능하면 해방을 시도합니다. 함수 시그니처에서 매개 변수를 생략 할 수 있습니다. 이 example을 참조하십시오.

관련 문제