在TypeScript网站上的Further Exploration示例中,他们向我们展示了一种基于某些条件将属性类型替换为不同类型的方法。
我们怎样才能做同样的事情,但以递归的方式?即不仅Map第一级属性,但任何嵌套的属性,通过检查。
示例:
type ExtractPII<Type> = {
[Property in keyof Type]: Type[Property] extends { pii: true } ? true : false;
};
type DBFields = {
id: { format: "incrementing" };
name: { type: string; pii: true };
};
type ObjectsNeedingGDPRDeletion = ExtractPII<DBFields>;
// type ObjectsNeedingGDPRDeletion = { id: false; name: true; }
我需要什么:
type DBFields = {
id: { format: "incrementing", foo: { type: string; pii: true } };
name: { type: string; pii: true };
};
type ObjectsNeedingGDPRDeletion = ExtractPII<DBFields>;
// type ObjectsNeedingGDPRDeletion = { id: { format: string; foo: true }; name: true; }
1条答案
按热度按时间nfeuvbwi1#
在
false
的情况下,您只需要执行另一个检查,看看该类型是否是一个对象,然后对该属性调用ExtractPii
。这将导致:
如果你想在
false
的情况下的值false
,然后只需替换T[P]
与false
: