* 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
336 lines
6.9 KiB
Plaintext
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
|
|
|
|
|