diff --git a/tests/baselines/reference/varianceCantBeStrictWhileStructureIsnt.js b/tests/baselines/reference/varianceCantBeStrictWhileStructureIsnt.js new file mode 100644 index 00000000000..e9c59527c50 --- /dev/null +++ b/tests/baselines/reference/varianceCantBeStrictWhileStructureIsnt.js @@ -0,0 +1,39 @@ +//// [tests/cases/compiler/varianceCantBeStrictWhileStructureIsnt.ts] //// + +//// [varianceCantBeStrictWhileStructureIsnt.ts] +// under non-strict-function-types, all the below should work +interface Foo { + member: (cb: T) => void; +} + +interface Bar { + member: (cb: T) => void; +} + +declare var a: Foo; +declare var b: Foo<"">; + +declare var a2: Bar; +declare var b2: Bar<"">; + +a = b; +b = a; + +a2 = b2; +b2 = a2; + +a = b2; +b = a2; + +a2 = b; +b2 = a; + +//// [varianceCantBeStrictWhileStructureIsnt.js] +a = b; +b = a; +a2 = b2; +b2 = a2; +a = b2; +b = a2; +a2 = b; +b2 = a; diff --git a/tests/baselines/reference/varianceCantBeStrictWhileStructureIsnt.symbols b/tests/baselines/reference/varianceCantBeStrictWhileStructureIsnt.symbols new file mode 100644 index 00000000000..5a628bbb72d --- /dev/null +++ b/tests/baselines/reference/varianceCantBeStrictWhileStructureIsnt.symbols @@ -0,0 +1,72 @@ +//// [tests/cases/compiler/varianceCantBeStrictWhileStructureIsnt.ts] //// + +=== varianceCantBeStrictWhileStructureIsnt.ts === +// under non-strict-function-types, all the below should work +interface Foo { +>Foo : Symbol(Foo, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 0, 0)) +>T : Symbol(T, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 1, 14)) + + member: (cb: T) => void; +>member : Symbol(Foo.member, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 1, 18)) +>cb : Symbol(cb, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 2, 13)) +>T : Symbol(T, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 1, 14)) +} + +interface Bar { +>Bar : Symbol(Bar, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 3, 1)) +>T : Symbol(T, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 5, 14)) + + member: (cb: T) => void; +>member : Symbol(Bar.member, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 5, 18)) +>cb : Symbol(cb, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 6, 13)) +>T : Symbol(T, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 5, 14)) +} + +declare var a: Foo; +>a : Symbol(a, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 9, 11)) +>Foo : Symbol(Foo, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 0, 0)) + +declare var b: Foo<"">; +>b : Symbol(b, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 10, 11)) +>Foo : Symbol(Foo, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 0, 0)) + +declare var a2: Bar; +>a2 : Symbol(a2, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 12, 11)) +>Bar : Symbol(Bar, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 3, 1)) + +declare var b2: Bar<"">; +>b2 : Symbol(b2, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 13, 11)) +>Bar : Symbol(Bar, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 3, 1)) + +a = b; +>a : Symbol(a, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 9, 11)) +>b : Symbol(b, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 10, 11)) + +b = a; +>b : Symbol(b, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 10, 11)) +>a : Symbol(a, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 9, 11)) + +a2 = b2; +>a2 : Symbol(a2, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 12, 11)) +>b2 : Symbol(b2, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 13, 11)) + +b2 = a2; +>b2 : Symbol(b2, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 13, 11)) +>a2 : Symbol(a2, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 12, 11)) + +a = b2; +>a : Symbol(a, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 9, 11)) +>b2 : Symbol(b2, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 13, 11)) + +b = a2; +>b : Symbol(b, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 10, 11)) +>a2 : Symbol(a2, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 12, 11)) + +a2 = b; +>a2 : Symbol(a2, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 12, 11)) +>b : Symbol(b, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 10, 11)) + +b2 = a; +>b2 : Symbol(b2, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 13, 11)) +>a : Symbol(a, Decl(varianceCantBeStrictWhileStructureIsnt.ts, 9, 11)) + diff --git a/tests/baselines/reference/varianceCantBeStrictWhileStructureIsnt.types b/tests/baselines/reference/varianceCantBeStrictWhileStructureIsnt.types new file mode 100644 index 00000000000..2e949fa6e40 --- /dev/null +++ b/tests/baselines/reference/varianceCantBeStrictWhileStructureIsnt.types @@ -0,0 +1,68 @@ +//// [tests/cases/compiler/varianceCantBeStrictWhileStructureIsnt.ts] //// + +=== varianceCantBeStrictWhileStructureIsnt.ts === +// under non-strict-function-types, all the below should work +interface Foo { + member: (cb: T) => void; +>member : (cb: T) => void +>cb : T +} + +interface Bar { + member: (cb: T) => void; +>member : (cb: T) => void +>cb : T +} + +declare var a: Foo; +>a : Foo + +declare var b: Foo<"">; +>b : Foo<""> + +declare var a2: Bar; +>a2 : Bar + +declare var b2: Bar<"">; +>b2 : Bar<""> + +a = b; +>a = b : Foo<""> +>a : Foo +>b : Foo<""> + +b = a; +>b = a : Foo +>b : Foo<""> +>a : Foo + +a2 = b2; +>a2 = b2 : Bar<""> +>a2 : Bar +>b2 : Bar<""> + +b2 = a2; +>b2 = a2 : Bar +>b2 : Bar<""> +>a2 : Bar + +a = b2; +>a = b2 : Bar<""> +>a : Foo +>b2 : Bar<""> + +b = a2; +>b = a2 : Bar +>b : Foo<""> +>a2 : Bar + +a2 = b; +>a2 = b : Foo<""> +>a2 : Bar +>b : Foo<""> + +b2 = a; +>b2 = a : Foo +>b2 : Bar<""> +>a : Foo + diff --git a/tests/cases/compiler/varianceCantBeStrictWhileStructureIsnt.ts b/tests/cases/compiler/varianceCantBeStrictWhileStructureIsnt.ts new file mode 100644 index 00000000000..e8b3ecf573f --- /dev/null +++ b/tests/cases/compiler/varianceCantBeStrictWhileStructureIsnt.ts @@ -0,0 +1,28 @@ +// @strict: false +// @strictFunctionTypes: false +// under non-strict-function-types, all the below should work +interface Foo { + member: (cb: T) => void; +} + +interface Bar { + member: (cb: T) => void; +} + +declare var a: Foo; +declare var b: Foo<"">; + +declare var a2: Bar; +declare var b2: Bar<"">; + +a = b; +b = a; + +a2 = b2; +b2 = a2; + +a = b2; +b = a2; + +a2 = b; +b2 = a; \ No newline at end of file