TypeScript/tests/cases/conformance/types/mapped/mappedTypeConstraints.ts
Anders Hejlsberg 7ad2661625 Add tests
2018-12-21 12:51:01 -08:00

37 lines
830 B
TypeScript

// @strict: true
function f0<T extends { a: string, b: string }>(obj: Pick<T, Extract<keyof T, 'b'>>) {
obj.b;
}
function f1<T extends { a: string, b: string }>(obj: Pick<T, Exclude<keyof T, 'a'>>) {
obj.b;
}
function f2<T extends { a: string, b: string }, U extends { b: string, c: string }>(obj: Pick<T | U, keyof (T | U)>) {
obj.b;
}
function f3<T extends { a: string, b: string }, U extends { b: string, c: string }>(obj: Pick<T & U, keyof (T & U)>) {
obj.a;
obj.b;
obj.c;
}
function f4<T extends { a: string, b: string }>(obj: Record<Exclude<keyof T, 'b'> | 'c', string>) {
obj.a;
obj.c;
}
// Repro from #28821
type TargetProps = {
foo: string,
bar: string
};
const modifier = <T extends TargetProps>(targetProps: T) => {
let {bar, ...rest} = targetProps;
rest.foo;
};