【发布时间】:2020-08-13 20:04:17
【问题描述】:
我正在使用 typescript 3.8.3 并尝试动态查找某种类型的键并使用它们来生成另一个对象。
我有一个Detail 对象,并希望使用它仅基于Desc 类型的属性动态生成Column 对象。
这是我想做的简化代码:
// Model
interface Desc {
creationDate: Date;
}
interface Address extends Desc {
zipCode: number;
adressName: string;
}
interface Order extends Desc {
id: number;
orderName: string;
}
interface Detail {
name: string;
address: Address[];
orders: Order[];
}
// Table column configuration
interface Column<T> {
field: keyof T;
active: boolean;
}
type ColumnConfig<T> = { [P in keyof T]: Column<T[P] extends Desc ? P : never>[] };
const config: ColumnConfig<Detail> = {
address: [
{
field: "zipCode",
active: true
},
{
field: "addressName",
active: true
}
],
order: [
{
field: "id",
active:false
},
{
field: "orderName",
active: false
}
],
// Detail.name should not be available but it is
}
如何从编译器的帮助中受益来构造我的config 对象,从而能够在我的Detail 对象发生变化时检测到任何错误?
谢谢!
【问题讨论】:
-
嗨 Nainpo,我看到您将
address声明为一个数组。那么你需要像Column<Address>[]这样的东西吗?您能否添加一个您想要类型的示例作为输出? -
事实上这是一个错字,直到现在我一直想要一个对象数组,但是 UnboxArray 有一天会很有用! :)
标签: typescript