//global.d.ts
type ConfigMeta = StringConfig | NumberConfig
declare interface Config<T> {
name: string
value: T
}
interface StringConfig extends Config<String> {
type: "string"
}
interface NumberConfig extends Config<Number> {
type: "number"
}
interface MetaData {
name: string,
config: ConfigMeta[]
}
declare function registerPlugin(meta: MetaData, callback: (config: Record<string, any>) => void): void
//script.ts
registerPlugin({
name: "some plugin",
config: [{
type: "string",
name: "foo",
value: "asdf"
}, {
type: "number",
name: "bar",
value: 123
}]
}, (config) => {
//the issue here, config is declared as Record<string, any>
//however is it possible to extract type information from above config input
//and get the correct key and associated types directly assigned?
console.log(config) //gives { foo: "asdf", bar: 123 }
})
Comments
0 B
|👍
/👎
0 B
|👍
/👎