如何在typescript中接收每个记录成员的类型?
我用谷歌搜索答案,但仍然没有找到。 所以,我必须把它贴在这里 问题很简单: 假设我有任何抽象类的记录如何在typescript中接收每个记录成员的类型?,typescript,typescript-typings,Typescript,Typescript Typings,我用谷歌搜索答案,但仍然没有找到。 所以,我必须把它贴在这里 问题很简单: 假设我有任何抽象类的记录 const record = Record<string, Model> 然后我将我的模型存储在我的记录中: record.classA = new A(); record.classB = new B(); 正如我们所看到的,我的记录中的属性是动态的 所以,问题是:有可能得到我模型中每个键和所有键的类型吗 例如,我想要这样的东西: function get(key: strin
const record = Record<string, Model>
然后我将我的模型存储在我的记录中:
record.classA = new A();
record.classB = new B();
正如我们所看到的,我的记录中的属性是动态的
所以,问题是:有可能得到我模型中每个键和所有键的类型吗
例如,我想要这样的东西:
function get(key: string) {
return record[key]; //Here I expect to receive a correct type (for example class A or class B regarding the key)
}
另一个问题是,当我在“记录”之后按enter键时,是否可能获取所有现有的键
我读过关于函数重载的文章,但这可能是另一种解决方案,或者我可以动态重载我的函数吗?我想为我的应用程序创建一个模块结构
非常感谢
在这方面,Dmitry是一种静态类型语言。这意味着如果将
record
定义为record
。其所有键的类型始终为型号
如果您想要更复杂的类型。您应该使用泛型或提前定义它
const record = {
classA: new A(),
classB: new B(),
}
泛型需要一个包装器
class RecoldHolder<T extends Record<string, Model>> {
record: T;
get<K extends keyof T>(key: K): T[K] {
return this.record[key];
}
}
类回收器{
记录:T;
get(key:K):T[K]{
返回此。记录[键];
}
}
PS:永远不要使用关键字作为函数名,有时会遇到非常奇怪的行为。使用
getter
,而不是get
,等等。只有当您愿意使用对象文本一次性初始化记录时,才能执行此操作。不太清楚“get type”是什么意思,但如果您可以使用已知键初始化对象,则typescript将自行推断类型(const-record=record
我假设它应该是const-record:record={};
)
class RecoldHolder<T extends Record<string, Model>> {
record: T;
get<K extends keyof T>(key: K): T[K] {
return this.record[key];
}
}