mirror of
https://github.com/microsoft/TypeScript.git
synced 2025-11-18 17:21:48 +00:00
Add tests
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
//// [nonNullableReduction.ts]
|
||||
// Repros from #43425
|
||||
|
||||
type Transform1<T> = ((value: string) => T) | (string extends T ? undefined : never);
|
||||
type Transform2<T> = string extends T ? ((value: string) => T) | undefined : (value: string) => T;
|
||||
|
||||
function test<T>(f1: Transform1<T>, f2: Transform2<T>) {
|
||||
f1?.("hello");
|
||||
f2?.("hello");
|
||||
}
|
||||
|
||||
function f1<T>(x: T | (string extends T ? null | undefined : never)) {
|
||||
let z = x!; // NonNullable<T>
|
||||
}
|
||||
|
||||
function f2<T, U extends null | undefined>(x: T | U) {
|
||||
let z = x!; // NonNullable<T>
|
||||
}
|
||||
|
||||
|
||||
//// [nonNullableReduction.js]
|
||||
"use strict";
|
||||
// Repros from #43425
|
||||
function test(f1, f2) {
|
||||
f1 === null || f1 === void 0 ? void 0 : f1("hello");
|
||||
f2 === null || f2 === void 0 ? void 0 : f2("hello");
|
||||
}
|
||||
function f1(x) {
|
||||
var z = x; // NonNullable<T>
|
||||
}
|
||||
function f2(x) {
|
||||
var z = x; // NonNullable<T>
|
||||
}
|
||||
@@ -0,0 +1,61 @@
|
||||
=== tests/cases/compiler/nonNullableReduction.ts ===
|
||||
// Repros from #43425
|
||||
|
||||
type Transform1<T> = ((value: string) => T) | (string extends T ? undefined : never);
|
||||
>Transform1 : Symbol(Transform1, Decl(nonNullableReduction.ts, 0, 0))
|
||||
>T : Symbol(T, Decl(nonNullableReduction.ts, 2, 16))
|
||||
>value : Symbol(value, Decl(nonNullableReduction.ts, 2, 23))
|
||||
>T : Symbol(T, Decl(nonNullableReduction.ts, 2, 16))
|
||||
>T : Symbol(T, Decl(nonNullableReduction.ts, 2, 16))
|
||||
|
||||
type Transform2<T> = string extends T ? ((value: string) => T) | undefined : (value: string) => T;
|
||||
>Transform2 : Symbol(Transform2, Decl(nonNullableReduction.ts, 2, 85))
|
||||
>T : Symbol(T, Decl(nonNullableReduction.ts, 3, 16))
|
||||
>T : Symbol(T, Decl(nonNullableReduction.ts, 3, 16))
|
||||
>value : Symbol(value, Decl(nonNullableReduction.ts, 3, 42))
|
||||
>T : Symbol(T, Decl(nonNullableReduction.ts, 3, 16))
|
||||
>value : Symbol(value, Decl(nonNullableReduction.ts, 3, 78))
|
||||
>T : Symbol(T, Decl(nonNullableReduction.ts, 3, 16))
|
||||
|
||||
function test<T>(f1: Transform1<T>, f2: Transform2<T>) {
|
||||
>test : Symbol(test, Decl(nonNullableReduction.ts, 3, 98))
|
||||
>T : Symbol(T, Decl(nonNullableReduction.ts, 5, 14))
|
||||
>f1 : Symbol(f1, Decl(nonNullableReduction.ts, 5, 17))
|
||||
>Transform1 : Symbol(Transform1, Decl(nonNullableReduction.ts, 0, 0))
|
||||
>T : Symbol(T, Decl(nonNullableReduction.ts, 5, 14))
|
||||
>f2 : Symbol(f2, Decl(nonNullableReduction.ts, 5, 35))
|
||||
>Transform2 : Symbol(Transform2, Decl(nonNullableReduction.ts, 2, 85))
|
||||
>T : Symbol(T, Decl(nonNullableReduction.ts, 5, 14))
|
||||
|
||||
f1?.("hello");
|
||||
>f1 : Symbol(f1, Decl(nonNullableReduction.ts, 5, 17))
|
||||
|
||||
f2?.("hello");
|
||||
>f2 : Symbol(f2, Decl(nonNullableReduction.ts, 5, 35))
|
||||
}
|
||||
|
||||
function f1<T>(x: T | (string extends T ? null | undefined : never)) {
|
||||
>f1 : Symbol(f1, Decl(nonNullableReduction.ts, 8, 1))
|
||||
>T : Symbol(T, Decl(nonNullableReduction.ts, 10, 12))
|
||||
>x : Symbol(x, Decl(nonNullableReduction.ts, 10, 15))
|
||||
>T : Symbol(T, Decl(nonNullableReduction.ts, 10, 12))
|
||||
>T : Symbol(T, Decl(nonNullableReduction.ts, 10, 12))
|
||||
|
||||
let z = x!; // NonNullable<T>
|
||||
>z : Symbol(z, Decl(nonNullableReduction.ts, 11, 7))
|
||||
>x : Symbol(x, Decl(nonNullableReduction.ts, 10, 15))
|
||||
}
|
||||
|
||||
function f2<T, U extends null | undefined>(x: T | U) {
|
||||
>f2 : Symbol(f2, Decl(nonNullableReduction.ts, 12, 1))
|
||||
>T : Symbol(T, Decl(nonNullableReduction.ts, 14, 12))
|
||||
>U : Symbol(U, Decl(nonNullableReduction.ts, 14, 14))
|
||||
>x : Symbol(x, Decl(nonNullableReduction.ts, 14, 43))
|
||||
>T : Symbol(T, Decl(nonNullableReduction.ts, 14, 12))
|
||||
>U : Symbol(U, Decl(nonNullableReduction.ts, 14, 14))
|
||||
|
||||
let z = x!; // NonNullable<T>
|
||||
>z : Symbol(z, Decl(nonNullableReduction.ts, 15, 7))
|
||||
>x : Symbol(x, Decl(nonNullableReduction.ts, 14, 43))
|
||||
}
|
||||
|
||||
@@ -0,0 +1,50 @@
|
||||
=== tests/cases/compiler/nonNullableReduction.ts ===
|
||||
// Repros from #43425
|
||||
|
||||
type Transform1<T> = ((value: string) => T) | (string extends T ? undefined : never);
|
||||
>Transform1 : Transform1<T>
|
||||
>value : string
|
||||
|
||||
type Transform2<T> = string extends T ? ((value: string) => T) | undefined : (value: string) => T;
|
||||
>Transform2 : Transform2<T>
|
||||
>value : string
|
||||
>value : string
|
||||
|
||||
function test<T>(f1: Transform1<T>, f2: Transform2<T>) {
|
||||
>test : <T>(f1: Transform1<T>, f2: Transform2<T>) => void
|
||||
>f1 : Transform1<T>
|
||||
>f2 : Transform2<T>
|
||||
|
||||
f1?.("hello");
|
||||
>f1?.("hello") : T | undefined
|
||||
>f1 : Transform1<T>
|
||||
>"hello" : "hello"
|
||||
|
||||
f2?.("hello");
|
||||
>f2?.("hello") : T | undefined
|
||||
>f2 : ((value: string) => T) | ((value: string) => T) | undefined
|
||||
>"hello" : "hello"
|
||||
}
|
||||
|
||||
function f1<T>(x: T | (string extends T ? null | undefined : never)) {
|
||||
>f1 : <T>(x: T | (string extends T ? null | undefined : never)) => void
|
||||
>x : T | (string extends T ? null | undefined : never)
|
||||
>null : null
|
||||
|
||||
let z = x!; // NonNullable<T>
|
||||
>z : NonNullable<T>
|
||||
>x! : NonNullable<T>
|
||||
>x : T | (string extends T ? null | undefined : never)
|
||||
}
|
||||
|
||||
function f2<T, U extends null | undefined>(x: T | U) {
|
||||
>f2 : <T, U extends null | undefined>(x: T | U) => void
|
||||
>null : null
|
||||
>x : T | U
|
||||
|
||||
let z = x!; // NonNullable<T>
|
||||
>z : NonNullable<T>
|
||||
>x! : NonNullable<T>
|
||||
>x : T | U
|
||||
}
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
// @strict: true
|
||||
|
||||
// Repros from #43425
|
||||
|
||||
type Transform1<T> = ((value: string) => T) | (string extends T ? undefined : never);
|
||||
type Transform2<T> = string extends T ? ((value: string) => T) | undefined : (value: string) => T;
|
||||
|
||||
function test<T>(f1: Transform1<T>, f2: Transform2<T>) {
|
||||
f1?.("hello");
|
||||
f2?.("hello");
|
||||
}
|
||||
|
||||
function f1<T>(x: T | (string extends T ? null | undefined : never)) {
|
||||
let z = x!; // NonNullable<T>
|
||||
}
|
||||
|
||||
function f2<T, U extends null | undefined>(x: T | U) {
|
||||
let z = x!; // NonNullable<T>
|
||||
}
|
||||
Reference in New Issue
Block a user