Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何强制typescript中变量的类型?_Node.js_Typescript - Fatal编程技术网

Node.js 如何强制typescript中变量的类型?

Node.js 如何强制typescript中变量的类型?,node.js,typescript,Node.js,Typescript,我正在尝试编写一些函数,将mongoose用户模型转换为带有要点的字符串: // 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

我正在尝试编写一些函数,将mongoose
用户
模型转换为带有要点的字符串:

// 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”类型

有没有一种方法可以将typescript“强制”给管理员,使
user[k]
是一个字符串? 我尝试了
user[k]作为字符串
user[k]
,但没有成功

另外,如果我从返回的字符串中删除
${user[k]}
,那么编译器将停止抱怨

从编译器错误中可以看出,一切都在运行时工作

谢谢

试试这个:

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')
}
函数userDetails(用户:IUser,键:string[]):string{
让dic:{[prop:string]:string}=user
返回keys.map((k:string):string=>{
返回`-${k}:${dic[k]}`
})
.join(“\n”)
}

关于
(用户)[k]
?哪个版本的TypeScript?你的例子很好用\非常感谢。如果你愿意,你可以把它写下来作为答案want@Paleo我使用的是带有
noImplicitAny
标志的typescript 2。我怀疑猫鼬与此有关。我无法用一个简单的脚本重现这个bug……我从未使用过
noImplicitAny
。也许这是一个限制。我会补充一个答案,即使我不确定,因为评论太少了。