2017-04-17 4 views
0

내가 반환 개체의 특성 working이없는 Store 있어야하기 때문에 오류가 발생하는 타이프 라이터를 기대하고원치 않는 속성이 인터페이스에 있어도 typescript에서 오류가 발생하지 않는 이유는 무엇입니까?

interface Store { 
    loading: boolean; 
} 

interface StoreMethod { 
    (s: Store): Store; 
} 

export const createStore: StoreMethod = (store) => { 
    return { ...store, working: false }; 
} 


export const loadStore: StoreMethod = (store) => { 
    return { loading: true, working: false }; 
} 

다음 코드 블록을 고려하십시오. 내가 놓친 게 있니?

놀이터에서 here 코드를 확인할 수 있습니다.

답변

3

당신이 이해할 필요가 typescript 인터페이스의 개념이없는 일반 자바 스크립트 코드. 타이프 라이터 형 A에서

A에 적어도을 가지고, 유형 AB을 수행하지만, A는 B가이 속성의 정확한 수를 할 필요가 없습니다 모든 속성이있는 경우 B와 호환 B, 즉 A에는 B에는없는 다른 속성이 포함될 수 있습니다. 따라서이 기능

export const loadStore: StoreMethod = (store) => { 
    return { loading: true, working: false }; 
} 

반환 된 개체에서 loading 속성을 제거하면 반환 된 객체는, Store에 호환 간주됩니다 있도록 계약을 당신의 Store을 강요하며를 satifies 분명히 PROPERT가 loading 촉구했다 반환 된 객체, 타이프 스크립트는 불평 할 것이다.

typescript의 인터페이스는 디자인 아티팩트이며 런타임에는 제공되지 않습니다.

+0

정확히 동일한 속성을 원한다면 어떻게해야합니까? – Neo

+1

그러면 코드를 수정해야합니다. 통조림 시간에 시행 할 방법이 없습니다. – Dummy