Skip to content

Commit

Permalink
Add tests for TS 4.7 features (#12924)
Browse files Browse the repository at this point in the history
* Add tests for instantiation expressions

* Add tests for infer extends

* Add tests for optional variance

* Update changelog
  • Loading branch information
sosukesuzuki committed May 27, 2022
1 parent a089819 commit 9c11aa1
Show file tree
Hide file tree
Showing 13 changed files with 361 additions and 327 deletions.
2 changes: 1 addition & 1 deletion changelog_unreleased/typescript/12896.md
@@ -1,4 +1,4 @@
#### [HIGHLIGHT]Support TypeScript 4.7 (#12896, #12897, #12898, #12900 by @sosukesuzuki)
#### [HIGHLIGHT]Support TypeScript 4.7 (#12896, #12897, #12898, #12900, #12921, #12924 by @sosukesuzuki)

Support [TypeScript 4.7](https://devblogs.microsoft.com/typescript/announcing-typescript-4-7) new features!

Expand Down
Expand Up @@ -184,339 +184,19 @@ type Foo =
================================================================================
`;
exports[`ts-4.7-infer-extends.ts format 1`] = `
====================================options=====================================
parsers: ["babel-ts"]
printWidth: 80
| printWidth
=====================================input======================================
type X3<T> = T extends [infer U extends number] ? MustBeNumber<U> : never;
type X4<T> = T extends [infer U extends number, infer U extends number] ? MustBeNumber<U> : never;
type X5<T> = T extends [infer U extends number, infer U] ? MustBeNumber<U> : never;
type X6<T> = T extends [infer U, infer U extends number] ? MustBeNumber<U> : never;
type X7<T> = T extends [infer U extends string, infer U extends number] ? U : never;
type X8<U, T> = T extends infer U extends number ? U : T;
type X9<U, T> = T extends (infer U extends number ? U : T) ? U : T;

=====================================output=====================================
type X3<T> = T extends [infer U extends number] ? MustBeNumber<U> : never;
type X4<T> = T extends [infer U extends number, infer U extends number]
? MustBeNumber<U>
: never;
type X5<T> = T extends [infer U extends number, infer U]
? MustBeNumber<U>
: never;
type X6<T> = T extends [infer U, infer U extends number]
? MustBeNumber<U>
: never;
type X7<T> = T extends [infer U extends string, infer U extends number]
? U
: never;
type X8<U, T> = T extends infer U extends number ? U : T;
type X9<U, T> = T extends (infer U extends number ? U : T) ? U : T;

================================================================================
`;

exports[`ts-4.7-instantiation-expression.ts format 1`] = `
====================================options=====================================
parsers: ["babel-ts"]
printWidth: 80
| printWidth
=====================================input======================================
// basic
const foo = bar<T>;

// typeof
let x: typeof y.z<w>;
// new
new A<T>;

=====================================output=====================================
// basic
const foo = bar<T>;

// typeof
let x: typeof y.z<w>;
// new
new A<T>();

================================================================================
`;

exports[`ts-4.7-optional-variance.ts format 1`] = `
====================================options=====================================
parsers: ["babel-ts"]
printWidth: 80
| printWidth
=====================================input======================================
type Covariant<out T> = {
x: T;
}
type Contravariant<in T> = {
f: (x: T) => void;
}
type Invariant<in out T> = {
f: (x: T) => T;
}
type T10<out T> = T;
type T11<in T> = keyof T;
type T12<out T, out K extends keyof T> = T[K];
type T13<in out T> = T[keyof T];

type Covariant1<in T> = {
x: T;
}

type Contravariant1<out T> = keyof T;

type Contravariant2<out T> = {
f: (x: T) => void;
}

type Invariant1<in T> = {
f: (x: T) => T;
}

type Invariant2<out T> = {
f: (x: T) => T;
}
type Foo1<in T> = {
x: T;
f: FooFn1<T>;
}

type Foo2<out T> = {
x: T;
f: FooFn2<T>;
}

type Foo3<in out T> = {
x: T;
f: FooFn3<T>;
}

type T21<in out T> = T;

interface Baz<out T> {}
interface Baz<in T> {}

interface Parent<out A> {
child: Child<A> | null;
parent: Parent<A> | null;
}

declare class StateNode<TContext, in out TEvent extends { type: string }> {
_storedEvent: TEvent;
_action: ActionObject<TEvent>;
_state: StateNode<TContext, any>;
}

=====================================output=====================================
type Covariant<out T> = {
x: T;
};
type Contravariant<in T> = {
f: (x: T) => void;
};
type Invariant<in out T> = {
f: (x: T) => T;
};
type T10<out T> = T;
type T11<in T> = keyof T;
type T12<out T, out K extends keyof T> = T[K];
type T13<in out T> = T[keyof T];

type Covariant1<in T> = {
x: T;
};

type Contravariant1<out T> = keyof T;

type Contravariant2<out T> = {
f: (x: T) => void;
};

type Invariant1<in T> = {
f: (x: T) => T;
};

type Invariant2<out T> = {
f: (x: T) => T;
};
type Foo1<in T> = {
x: T;
f: FooFn1<T>;
};

type Foo2<out T> = {
x: T;
f: FooFn2<T>;
};

type Foo3<in out T> = {
x: T;
f: FooFn3<T>;
};

type T21<in out T> = T;

interface Baz<out T> {}
interface Baz<in T> {}

interface Parent<out A> {
child: Child<A> | null;
parent: Parent<A> | null;
}

declare class StateNode<TContext, in out TEvent extends { type: string }> {
_storedEvent: TEvent;
_action: ActionObject<TEvent>;
_state: StateNode<TContext, any>;
}

================================================================================
`;

exports[`ts-4.7-optional-variance-with-jsx.tsx format 1`] = `
====================================options=====================================
parsers: ["babel-ts"]
printWidth: 80
| printWidth
=====================================input======================================
// valid JSX
<in T>() => {}</in>;

type Covariant<out T> = {
x: T;
}
type Contravariant<in T> = {
f: (x: T) => void;
}
type Invariant<in out T> = {
f: (x: T) => T;
}
type T10<out T> = T;
type T11<in T> = keyof T;
type T12<out T, out K extends keyof T> = T[K];
type T13<in out T> = T[keyof T];

type Covariant1<in T> = {
x: T;
}

type Contravariant1<out T> = keyof T;

type Contravariant2<out T> = {
f: (x: T) => void;
}

type Invariant1<in T> = {
f: (x: T) => T;
}

type Invariant2<out T> = {
f: (x: T) => T;
}
type Foo1<in T> = {
x: T;
f: FooFn1<T>;
}

type Foo2<out T> = {
x: T;
f: FooFn2<T>;
}

type Foo3<in out T> = {
x: T;
f: FooFn3<T>;
}

type T21<in out T> = T;

interface Baz<out T> {}
interface Baz<in T> {}

interface Parent<out A> {
child: Child<A> | null;
parent: Parent<A> | null;
}

declare class StateNode<TContext, in out TEvent extends { type: string }> {
_storedEvent: TEvent;
_action: ActionObject<TEvent>;
_state: StateNode<TContext, any>;
}

=====================================output=====================================
// valid JSX
<in T>() => {}</in>;

type Covariant<out T> = {
x: T;
};
type Contravariant<in T> = {
f: (x: T) => void;
};
type Invariant<in out T> = {
f: (x: T) => T;
};
type T10<out T> = T;
type T11<in T> = keyof T;
type T12<out T, out K extends keyof T> = T[K];
type T13<in out T> = T[keyof T];

type Covariant1<in T> = {
x: T;
};

type Contravariant1<out T> = keyof T;

type Contravariant2<out T> = {
f: (x: T) => void;
};

type Invariant1<in T> = {
f: (x: T) => T;
};

type Invariant2<out T> = {
f: (x: T) => T;
};
type Foo1<in T> = {
x: T;
f: FooFn1<T>;
};

type Foo2<out T> = {
x: T;
f: FooFn2<T>;
};

type Foo3<in out T> = {
x: T;
f: FooFn3<T>;
};

type T21<in out T> = T;

interface Baz<out T> {}
interface Baz<in T> {}

interface Parent<out A> {
child: Child<A> | null;
parent: Parent<A> | null;
}

declare class StateNode<TContext, in out TEvent extends { type: string }> {
_storedEvent: TEvent;
_action: ActionObject<TEvent>;
_state: StateNode<TContext, any>;
}

================================================================================
`;
Expand Down
@@ -1,8 +1,2 @@
// basic
const foo = bar<T>;

// typeof
let x: typeof y.z<w>;

// new
new A<T>;
@@ -0,0 +1,35 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`basic.ts format 1`] = `
====================================options=====================================
parsers: ["typescript"]
printWidth: 80
| printWidth
=====================================input======================================
type X3<T> = T extends [infer U extends number] ? MustBeNumber<U> : never;
type X4<T> = T extends [infer U extends number, infer U extends number] ? MustBeNumber<U> : never;
type X5<T> = T extends [infer U extends number, infer U] ? MustBeNumber<U> : never;
type X6<T> = T extends [infer U, infer U extends number] ? MustBeNumber<U> : never;
type X7<T> = T extends [infer U extends string, infer U extends number] ? U : never;
type X8<U, T> = T extends infer U extends number ? U : T;
type X9<U, T> = T extends (infer U extends number ? U : T) ? U : T;
=====================================output=====================================
type X3<T> = T extends [infer U extends number] ? MustBeNumber<U> : never;
type X4<T> = T extends [infer U extends number, infer U extends number]
? MustBeNumber<U>
: never;
type X5<T> = T extends [infer U extends number, infer U]
? MustBeNumber<U>
: never;
type X6<T> = T extends [infer U, infer U extends number]
? MustBeNumber<U>
: never;
type X7<T> = T extends [infer U extends string, infer U extends number]
? U
: never;
type X8<U, T> = T extends infer U extends number ? U : T;
type X9<U, T> = T extends (infer U extends number ? U : T) ? U : T;
================================================================================
`;
1 change: 1 addition & 0 deletions tests/format/typescript/infer-extends/jsfmt.spec.js
@@ -0,0 +1 @@
run_spec(__dirname, ["typescript"]);

0 comments on commit 9c11aa1

Please sign in to comment.