2016-09-29 100 views
1

我嘗試寫一些函數,貓鼬User模型轉換爲字符串要點:如何在打字稿中強制變量的類型?

// Simplified version so you get the idea 
interface IUser { 
    name: string 
} 

function userDetails (user: IUser, keys: string[]): string { 
    return keys.map((k: string): string => { 
    return `- ${k} : ${user[k]}` 
    }) 
    .join('\n') 
} 

,但我有一個奇怪的編譯器錯誤,其中user[k]加下劃線:

對象類型的索引簽名隱式具有'any'類型。

有沒有辦法「強制」打印到管理員那user[k]是一個字符串? 我試過user[k] as string<string> user[k]沒有成功。

另外,如果我從返回的字符串中刪除${user[k]},那麼編譯器停止從編譯器錯誤抱怨

Appart酒店,一切都運行在運行時。

謝謝!

+0

怎麼樣'用戶)[K]'? – Ryan

+0

哪個版本的TypeScript?你的例子[在遊樂場工作](http://www.typescriptlang.org/play/#src=interface%20IUser%20 {%0D%0A%20%20name%3A%20string%0D%0A}%0D% 0A%0D%0Afunction%20userDetails%20%28user%3A%20IUser%2C%20keys%3A%20string []%29%3A%20string%20 {%0D 0A%%20%20return%20keys.map%28%28K %3A%20string%29%3A%20string%20%3D%3E%20 {%0D 0A%%20%20%20%20return%20%60-70%20%24 {K}%20%3A%20% 24 {用戶[k]的}%60%0D 0A%%20%20}%29%0D 0A%%20%20.join%28%27 \ N%27%29%0D 0A%})。 – Paleo

+0

@Ryan它的作品! \ o /非常感謝。如果你需要,你可以把它寫成答案 – aherve

回答

1

試試這個:

function userDetails(user: IUser, keys: string[]): string { 
    let dic: { [prop: string]: string } = <any>user 
    return keys.map((k: string): string => { 
     return `- ${k} : ${dic[k]}` 
    }) 
    .join('\n') 
} 
+0

不錯,工作。謝謝 ! – aherve