1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
interface RelationFields {
x: A;
y: A[];
z: A[];
}
type Name = keyof RelationFields;
type ShouldA<RF extends RelationFields, N extends Name> = RF[N] extends A[]
? RF[N][0]
: never;
class A {
x: A;
y: A[];
z: A[];
whereRelated< // Works // Type is same as A1, but is not assignable to type A
RF extends RelationFields = RelationFields,
N extends Name = Name,
A1 extends A = RF[N] extends A[] ? RF[N][0] : never,
A2 extends A = ShouldA<RF, N>
>(): number {
return 1;
}
}
|