2017-09-13 19 views
1
interface SkillProperty { 
     [name: string] : number 
    }; 

    let skills: SkillProperty; 

    skills = {}; // ok 

    skills = { fire: 123 }; // ok 

    skills = { 
     ...skills, // ok 
     ...{}, // ok 
     ...extraSkills() // {} | { ice: number } is not assignable to type 'SkillProperty'. 
    } 

    function extraSkills() { 
     if (whatever) { 
      return {}; 
     } 
     return { ice: 321 }; 
    } 

은 어떻게 SkillProperty 인터페이스 빈 객체 내 실제 SkillProperty 유형 모두가 준수하도록 변경할 수 있습니까?타이프 라이터 타입 추론, 확산 연산자와 여러 종류의 반환

+0

이것은 나에게 TypeScript의 버그처럼 보입니다. – jcalz

답변

0

귀하의 SkillProperty 인터페이스 {} | {ice: number}와 실제로 호환입니다 :

let noSkills = {} 
let iceSkills = { ice: 321 }; 
let randomSkills: {} | {ice: number} = (Math.random() < 0.5) ? noSkills : iceSkills 
let maybeSkills: SkillProperty = randomSkills; // no error 

그래서, 이것은 나에게 타이프의 버그처럼 보인다. 유사 issuefixed 이었지만, this case은 지속되는 것처럼 보입니다. 기존 문제에 대한 링크가있는 새로운 문제를 열면 유용 할 것입니다. 같은 해결 방법, 그 동안

이 있습니다 : 도움이

skills = { 
    ...skills, // ok 
    ...{}, // ok 
    ...extraSkills() as SkillProperty // okay now 
} 

희망; 행운을 빕니다!

+0

고마워요! 필자는 명시 적으로 함수를 'extraSkills() : SkillProperty'라고 입력하면 컴파일 문제를 해결하는 것으로 보입니다. 유형을 추론 할 다른 솔루션이 있는지보고 싶었습니다. – LazyHatIQ