Skip to content

Commit 4d14c9f

Browse files
add use-case: type substraction / assertion (!)
1 parent 28aece0 commit 4d14c9f

File tree

4 files changed

+240
-172
lines changed

4 files changed

+240
-172
lines changed

tests/baselines/reference/typeCall.js

+10-2
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,12 @@ let strBool: isBool(string); // 0
107107
let anyBool: isBool(any); // 0
108108
let neverBool: isBool(never); // 0
109109

110+
type Assert<T> = (<U>(v: U | null | undefined) => U)(T);
111+
let assert: Assert<string | undefined>; // string
112+
113+
type Minus<A, B> = (<U>(v: U | B) => U)(A);
114+
let noNumbers: Minus<string | number, number>; // string
115+
110116
interface ObjectHasStringIndex {
111117
// <T extends { [k: string]: any }>(o: T): T[string];
112118
(o: { [k: string]: any }): '1';
@@ -152,8 +158,8 @@ type T19 = Strip2<() => Obj>; // fails, unresolved, want { x: number, z: { kind:
152158

153159
let a1: () => string;
154160
let b1: typeof a1();
155-
type Assert<T extends () => any> = T();
156-
let c1: Assert<typeof a1>;
161+
type Abc<T extends () => any> = T();
162+
let c1: Abc<typeof a1>;
157163

158164
declare function infer1<T extends () => any>(x: T): T();
159165
infer1(null! as () => number);
@@ -221,6 +227,8 @@ var trueBool; // 1
221227
var strBool; // 0
222228
var anyBool; // 0
223229
var neverBool; // 0
230+
var assert; // string
231+
var noNumbers; // string
224232
var ObjectHasStringIndexTestT; // '1'
225233
var ObjectHasStringIndexTestF; // wanted '0', got '1'... so can't match for index, and erroring RHS yields `any`. ouch.
226234
var a1;

0 commit comments

Comments
 (0)