如何在打字稿中强制变量的类型?

如何在打字稿中强制变量的类型?

问题描述:

我尝试写一些函数,猫鼬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

试试这个:

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