Add tests
This commit is contained in:
parent
7737cd5f1f
commit
22907bfb07
|
@ -0,0 +1,74 @@
|
|||
// @strict: true
|
||||
|
||||
function f10(x : { kind: false, a: string } | { kind: true, b: string } | { kind: string, c: string }) {
|
||||
if (x.kind === false) {
|
||||
x.a;
|
||||
}
|
||||
else if (x.kind === true) {
|
||||
x.b;
|
||||
}
|
||||
else {
|
||||
x.c;
|
||||
}
|
||||
}
|
||||
|
||||
function f11(x : { kind: false, a: string } | { kind: true, b: string } | { kind: string, c: string }) {
|
||||
switch (x.kind) {
|
||||
case false:
|
||||
x.a;
|
||||
break;
|
||||
case true:
|
||||
x.b;
|
||||
break;
|
||||
default:
|
||||
x.c;
|
||||
}
|
||||
}
|
||||
|
||||
function f13(x: { a: null; b: string } | { a: string, c: number }) {
|
||||
x = { a: null, b: "foo", c: 4}; // Error
|
||||
}
|
||||
|
||||
function f14<T>(x: { a: 0; b: string } | { a: T, c: number }) {
|
||||
if (x.a === 0) {
|
||||
x.b; // Error
|
||||
}
|
||||
}
|
||||
|
||||
type Result<T> = { error?: undefined, value: T } | { error: Error };
|
||||
|
||||
function f15(x: Result<number>) {
|
||||
if (!x.error) {
|
||||
x.value;
|
||||
}
|
||||
else {
|
||||
x.error.message;
|
||||
}
|
||||
}
|
||||
|
||||
f15({ value: 10 });
|
||||
f15({ error: new Error("boom") });
|
||||
|
||||
// Repro from #24193
|
||||
|
||||
interface WithError {
|
||||
error: Error
|
||||
data: null
|
||||
}
|
||||
|
||||
interface WithoutError<Data> {
|
||||
error: null
|
||||
data: Data
|
||||
}
|
||||
|
||||
type DataCarrier<Data> = WithError | WithoutError<Data>
|
||||
|
||||
function f20<Data>(carrier: DataCarrier<Data>) {
|
||||
if (carrier.error === null) {
|
||||
const error: null = carrier.error
|
||||
const data: Data = carrier.data
|
||||
} else {
|
||||
const error: Error = carrier.error
|
||||
const data: null = carrier.data
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue