#11.21
TS获取readonly
key值
interface A {
readonly test: boolean;
readonly test1: boolean;
test2: string;
test3: number
}
type IfEquals<X, Y, A=X, B=never> = (<T>() => T extends X ? 1 : 0) extends (<T>() => T extends Y ? 1 : 0) ? A : B;
type ReadonlyKey<T> = {
[P in keyof T]: IfEquals<{ [Q in P]: T[P] }, { -readonly [Q in P]: T[P] }, never, P>
}[keyof T];
type C = ReadonlyKey<A>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
2
3
4
5
6
7
8
9
10
11
12
13
14