2017-09-13 129 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中的一個bug。 – 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