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