假设我们有一个类型为
const originalObj = { foo: 'fooVal', bar: 'barVal' };
如何编写一个实用程序类型来从原始对象创建一个有区别的联合体,以便每个成员看起来像
type Sample1 = {
header: string;
accessor: 'foo' //discriminant
render?: (value: 'fooVal', original: typeof originalObj) => React.ReactNode;
};
type Sample2 = {
header: string;
accessor: 'bar' //discriminant
render?: (value: 'barVal', original: typeof originalObj) => React.ReactNode;
};
如果手动创建,所需内容将如下所示
type OriginalObjMappedToUnIonOfSamples = Sample1 | Sample2;
如何编写一个helper,在只给出原始对象类型的情况下自动为我创建这个对象?
type WhatIWant = GetDiscriminatedUnionOfSamples<typeof originalObj>;
1条答案
按热度按时间fnatzsnv1#
您可以使用 mapped type 将
originalObj
中的每个键Map到其对应的对象类型。使用keyof T
索引结果将生成您要查找的结果。Playground