Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.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
Javascript 映射类型:将关键点设置为对象_Javascript_Typescript - Fatal编程技术网

Javascript 映射类型:将关键点设置为对象

Javascript 映射类型:将关键点设置为对象,javascript,typescript,Javascript,Typescript,我仍在尝试了解映射类型,因此我试图实现如下项目配置: let config = { connA: { host: 'abc123', user: 'abc123', password: 'abc123', database: 'abc123', }, connB: { host: 'abc123', user: 'abc123', password: 'abc123', dat

我仍在尝试了解映射类型,因此我试图实现如下项目配置:

let config = {
    connA: {
      host: 'abc123',
      user: 'abc123',
      password: 'abc123',
      database: 'abc123',
    },
    connB: {
      host: 'abc123',
      user: 'abc123',
      password: 'abc123',
      database: 'abc123',
    }
}
public static connect(config: DatabaseConnections<DatabaseConnection>) {
for (let db in config) {
  db.host
}
我想为键
connA
connB
等设置一个类型,这些键可以是任何东西

export interface DatabaseConnection {
  host: string
  user: string
  password: string
  database: string
}

export type DatabaseConnections<T> = {
  [P in keyof T]: T[P]
}
导出接口数据库连接{
主持人:字符串
用户:字符串
密码:string
数据库:字符串
}
导出类型数据库连接={
[P in keyof T]:T[P]
}
所以,当我使用它时,它会是这样的:

let config = {
    connA: {
      host: 'abc123',
      user: 'abc123',
      password: 'abc123',
      database: 'abc123',
    },
    connB: {
      host: 'abc123',
      user: 'abc123',
      password: 'abc123',
      database: 'abc123',
    }
}
public static connect(config: DatabaseConnections<DatabaseConnection>) {
for (let db in config) {
  db.host
}
公共静态连接(配置:数据库连接){ for(让db进入配置){ 数据库主机 }
当我这样做时,它说
db
是一个
字符串
,它应该是一个
对象
connA
connB
),据我所知,您并不是在寻找映射类型。您是在寻找索引签名

export type DatabaseConnections<T> = {
  [name: string]: T
}

public static connect(config: DatabaseConnections<DatabaseConnection>) {
   for (let db in config) {
      config[db] // this will be of type T
   }
}
导出类型数据库连接={
[名称:字符串]:T
}
公共静态连接(配置:数据库连接){
for(让db进入配置){
config[db]//这将是类型T
}
}

中迭代对象键。它们是舒尔的字符串的只能在本机的数组和字符串上使用。要在对象上使用,您需要定义一个迭代器(正如它告诉您的)。您可以使用
对象。值
映射
而不是对象。好吧,很酷!这似乎有效。我以为我上次做了映射类型,我做了类似的事情。这将是一件好事!