我想从原始类型中创建新的对象类型 属性键以“目标字符串”开头时应过滤。
来源类型:
type Origin = {
a: string,
b: string,
_c: string,
_d: string,
}
我想要的结果类型。
// type Result = SomethingWork<Origin, '_'>;
type Result = {
a: string,
b: string
};
来源类型具有动态属性键。
所以如果使用像'_c' | '_d'
答案 0 :(得分:0)
不能使用前缀
但是
import { ITSDiff, ITSPickMember } from 'ts-type';
export type Origin = {
a: string,
b: string,
_c: string,
_d: string,
}
export type Result = Pick<Origin, ITSDiff<keyof Origin, '_c' | '_d'>>
let a: Result;
a.a.padEnd(1)
a._c // err
export type OriginOnlyHasPrefix = {
_c: string,
_d: string,
}
export type Result3 = Pick<Origin, ITSDiff<keyof Origin, keyof OriginOnlyHasPrefix>>
let a3: Result3;
a3.a.padEnd(1)
// @ts-ignore err when without @ts-ignore
a3._c;
答案 1 :(得分:0)
现在可以使用模板文字类型
type FilterNotStartingWith<Set, Needle extends string> = Set extends `${Needle}${infer _X}` ? never : Set
示例:
type Origin = {
a: string,
b: string,
_c: string,
_d: string,
}
type FilteredKeys = FilterNotStartingWith<keyof Origin, '_'>
type NewOrigin = Pick<Origin, FilteredKeys>
/*
type NewOrigin = {
a: string;
b: string;
}
*/