TypeScript/tests/baselines/reference/objectTypesIdentityWithPrivates.types
Wesley Wigham 78a99241d8
Reuse input type nodes when serializing signature parameter and return types (#37444)
* Accept change

* Accept the huge set of ever so slightly changed baselines

* Update return type logic to only reuse nodes if original nodes share scope with current node, like property types, only reuse nodes if symbols referened are acessible, reuse nodes for property signatures, too

* Only reuse nodes when a context is provided (otherwise identifier printback may fail)

* Only track symbol if symbol is found and no error is recorded

* Fix type parameter reuse lookup

* Forbid cjs module.exports references in retained nodes

* Adjust check for cjs export references to not include bad module type in output

* Add symbol to all identifiers we see in existing nodes for quickinfo

* Accept fourslash baseline updates

* Accept slightly updated baseline post-merge

* Do not copy original nodes for error types, replace empty type references with any
2020-04-01 19:50:21 -07:00

336 lines
6.9 KiB
Plaintext

=== tests/cases/conformance/types/typeRelationships/typeAndMemberIdentity/objectTypesIdentityWithPrivates.ts ===
// object types are identical structurally
class A {
>A : A
private foo: string;
>foo : string
}
class B {
>B : B
private foo: string;
>foo : string
}
class C<T> {
>C : C<T>
private foo: T;
>foo : T
}
interface I {
foo: string;
>foo : string
}
class PA extends A {
>PA : PA
>A : A
}
class PB extends B {
>PB : PB
>B : B
}
var a: { foo: string; }
>a : { foo: string; }
>foo : string
var b = { foo: '' };
>b : { foo: string; }
>{ foo: '' } : { foo: string; }
>foo : string
>'' : ""
function foo1(x: A);
>foo1 : { (x: A): any; (x: A): any; }
>x : A
function foo1(x: A); // error
>foo1 : { (x: A): any; (x: A): any; }
>x : A
function foo1(x: any) { }
>foo1 : { (x: A): any; (x: A): any; }
>x : any
function foo1b(x: B);
>foo1b : { (x: B): any; (x: B): any; }
>x : B
function foo1b(x: B); // error
>foo1b : { (x: B): any; (x: B): any; }
>x : B
function foo1b(x: any) { }
>foo1b : { (x: B): any; (x: B): any; }
>x : any
function foo1c(x: C<string>);
>foo1c : { (x: C<string>): any; (x: C<string>): any; }
>x : C<string>
function foo1c(x: C<string>); // error
>foo1c : { (x: C<string>): any; (x: C<string>): any; }
>x : C<string>
function foo1c(x: any) { }
>foo1c : { (x: C<string>): any; (x: C<string>): any; }
>x : any
function foo2(x: I);
>foo2 : { (x: I): any; (x: I): any; }
>x : I
function foo2(x: I); // error
>foo2 : { (x: I): any; (x: I): any; }
>x : I
function foo2(x: any) { }
>foo2 : { (x: I): any; (x: I): any; }
>x : any
function foo3(x: typeof a);
>foo3 : { (x: typeof a): any; (x: { foo: string; }): any; }
>x : { foo: string; }
>a : { foo: string; }
function foo3(x: typeof a); // error
>foo3 : { (x: { foo: string; }): any; (x: typeof a): any; }
>x : { foo: string; }
>a : { foo: string; }
function foo3(x: any) { }
>foo3 : { (x: { foo: string; }): any; (x: { foo: string; }): any; }
>x : any
function foo4(x: typeof b);
>foo4 : { (x: typeof b): any; (x: { foo: string; }): any; }
>x : { foo: string; }
>b : { foo: string; }
function foo4(x: typeof b); // error
>foo4 : { (x: { foo: string; }): any; (x: typeof b): any; }
>x : { foo: string; }
>b : { foo: string; }
function foo4(x: any) { }
>foo4 : { (x: { foo: string; }): any; (x: { foo: string; }): any; }
>x : any
function foo5(x: A);
>foo5 : { (x: A): any; (x: B): any; }
>x : A
function foo5(x: B); // no error
>foo5 : { (x: A): any; (x: B): any; }
>x : B
function foo5(x: any) { }
>foo5 : { (x: A): any; (x: B): any; }
>x : any
function foo5b(x: A);
>foo5b : { (x: A): any; (x: C<string>): any; }
>x : A
function foo5b(x: C<string>); // no error
>foo5b : { (x: A): any; (x: C<string>): any; }
>x : C<string>
function foo5b(x: any) { }
>foo5b : { (x: A): any; (x: C<string>): any; }
>x : any
function foo5c(x: A);
>foo5c : { (x: A): any; (x: PA): any; }
>x : A
function foo5c(x: PA); // error
>foo5c : { (x: A): any; (x: PA): any; }
>x : PA
function foo5c(x: any) { }
>foo5c : { (x: A): any; (x: PA): any; }
>x : any
function foo5d(x: A);
>foo5d : { (x: A): any; (x: PB): any; }
>x : A
function foo5d(x: PB); // no error
>foo5d : { (x: A): any; (x: PB): any; }
>x : PB
function foo5d(x: any) { }
>foo5d : { (x: A): any; (x: PB): any; }
>x : any
function foo6(x: A);
>foo6 : { (x: A): any; (x: I): any; }
>x : A
function foo6(x: I); // no error
>foo6 : { (x: A): any; (x: I): any; }
>x : I
function foo6(x: any) { }
>foo6 : { (x: A): any; (x: I): any; }
>x : any
function foo7(x: A);
>foo7 : { (x: A): any; (x: { foo: string; }): any; }
>x : A
function foo7(x: typeof a); // no error
>foo7 : { (x: A): any; (x: typeof a): any; }
>x : { foo: string; }
>a : { foo: string; }
function foo7(x: any) { }
>foo7 : { (x: A): any; (x: { foo: string; }): any; }
>x : any
function foo8(x: B);
>foo8 : { (x: B): any; (x: I): any; }
>x : B
function foo8(x: I); // no error
>foo8 : { (x: B): any; (x: I): any; }
>x : I
function foo8(x: any) { }
>foo8 : { (x: B): any; (x: I): any; }
>x : any
function foo9(x: B);
>foo9 : { (x: B): any; (x: C<string>): any; }
>x : B
function foo9(x: C<string>); // no error
>foo9 : { (x: B): any; (x: C<string>): any; }
>x : C<string>
function foo9(x: any) { }
>foo9 : { (x: B): any; (x: C<string>): any; }
>x : any
function foo10(x: B);
>foo10 : { (x: B): any; (x: { foo: string; }): any; }
>x : B
function foo10(x: typeof a); // no error
>foo10 : { (x: B): any; (x: typeof a): any; }
>x : { foo: string; }
>a : { foo: string; }
function foo10(x: any) { }
>foo10 : { (x: B): any; (x: { foo: string; }): any; }
>x : any
function foo11(x: B);
>foo11 : { (x: B): any; (x: { foo: string; }): any; }
>x : B
function foo11(x: typeof b); // no error
>foo11 : { (x: B): any; (x: typeof b): any; }
>x : { foo: string; }
>b : { foo: string; }
function foo11(x: any) { }
>foo11 : { (x: B): any; (x: { foo: string; }): any; }
>x : any
function foo11b(x: B);
>foo11b : { (x: B): any; (x: PA): any; }
>x : B
function foo11b(x: PA); // no error
>foo11b : { (x: B): any; (x: PA): any; }
>x : PA
function foo11b(x: any) { }
>foo11b : { (x: B): any; (x: PA): any; }
>x : any
function foo11c(x: B);
>foo11c : { (x: B): any; (x: PB): any; }
>x : B
function foo11c(x: PB); // error
>foo11c : { (x: B): any; (x: PB): any; }
>x : PB
function foo11c(x: any) { }
>foo11c : { (x: B): any; (x: PB): any; }
>x : any
function foo12(x: I);
>foo12 : { (x: I): any; (x: C<string>): any; }
>x : I
function foo12(x: C<string>); // no error
>foo12 : { (x: I): any; (x: C<string>): any; }
>x : C<string>
function foo12(x: any) { }
>foo12 : { (x: I): any; (x: C<string>): any; }
>x : any
function foo13(x: I);
>foo13 : { (x: I): any; (x: { foo: string; }): any; }
>x : I
function foo13(x: typeof a); // error
>foo13 : { (x: I): any; (x: typeof a): any; }
>x : { foo: string; }
>a : { foo: string; }
function foo13(x: any) { }
>foo13 : { (x: I): any; (x: { foo: string; }): any; }
>x : any
function foo14(x: I);
>foo14 : { (x: I): any; (x: { foo: string; }): any; }
>x : I
function foo14(x: typeof b); // error
>foo14 : { (x: I): any; (x: typeof b): any; }
>x : { foo: string; }
>b : { foo: string; }
function foo14(x: any) { }
>foo14 : { (x: I): any; (x: { foo: string; }): any; }
>x : any
function foo15(x: I);
>foo15 : { (x: I): any; (x: PA): any; }
>x : I
function foo15(x: PA); // no error
>foo15 : { (x: I): any; (x: PA): any; }
>x : PA
function foo15(x: any) { }
>foo15 : { (x: I): any; (x: PA): any; }
>x : any
function foo16(x: I);
>foo16 : { (x: I): any; (x: PB): any; }
>x : I
function foo16(x: PB); // no error
>foo16 : { (x: I): any; (x: PB): any; }
>x : PB
function foo16(x: any) { }
>foo16 : { (x: I): any; (x: PB): any; }
>x : any