TypeScript/tests/baselines/reference/callSignatureAssignabilityInInheritance.types
Wesley Wigham 5353475fce Always collect type and symbol baselines (#18621)
* Always generate type & symbol baselines

* Accept changed shadowed baselines

* Accept brand new type and symbol baselines

* Allow `getTypeAtLocation` to return undefined in the type writer

* Accept baselines which had missing type information

* Bind container for dynamically names enum members so they may be printed

* Accept type/symbol baselines for enums with computed members

* First pass at reducing typeWriter memory overhead

* Use generators to allow for type and symbol baselines with no cache

* Accept new baselines for tests whose output was fixed by better newline splitting

* Hard cap on number of declarations printed, cache declaration print text

* handle differing newlines better still to handle RWC newlines

* Lower abridging count, accept abridged baselines

* Limit max RWC error output size, limit RWC type and symbol baseline input size

* Move skip logic into type and symbol baseliner to streamline error handling

* Accept removal of empty baselines

* Canonicalize path earlier to handle odd paths in input files

* Do canonicalization earlier still, also ensure parallel perf profiles for different targets do not trample one another

* No need to pathify again
2017-09-22 15:52:04 -07:00

152 lines
2.7 KiB
Plaintext

=== tests/cases/conformance/types/typeRelationships/assignmentCompatibility/callSignatureAssignabilityInInheritance.ts ===
module CallSignature {
>CallSignature : any
interface Base { // T
>Base : Base
// M's
(x: number): void;
>x : number
(x: number, y: number): void;
>x : number
>y : number
}
// S's
interface I extends Base {
>I : I
>Base : Base
// N's
(x: number): number; // ok because base returns void
>x : number
(x: number, y: number): boolean; // ok because base returns void
>x : number
>y : number
<T>(x: T): string; // ok because base returns void
>T : T
>x : T
>T : T
}
interface Base2 { // T
>Base2 : Base2
// M's
(x: number): number;
>x : number
}
// S's
interface I2 extends Base2 {
>I2 : I2
>Base2 : Base2
// N's
(x: number): string; // error because base returns non-void;
>x : number
}
// S's
interface I3 extends Base2 {
>I3 : I3
>Base2 : Base2
// N's
<T>(x: T): string; // ok, adds a new call signature
>T : T
>x : T
>T : T
}
}
module MemberWithCallSignature {
>MemberWithCallSignature : any
interface Base { // T
>Base : Base
// M's
a: (x: number) => void;
>a : (x: number) => void
>x : number
a2: (x: number, y: number) => void;
>a2 : (x: number, y: number) => void
>x : number
>y : number
a3: <T>(x: T) => void;
>a3 : <T>(x: T) => void
>T : T
>x : T
>T : T
}
// S's
interface I extends Base {
>I : I
>Base : Base
// N's
a: (x: number) => number; // ok because base returns void
>a : (x: number) => number
>x : number
a2: (x: number, y: number) => boolean; // ok because base returns void
>a2 : (x: number, y: number) => boolean
>x : number
>y : number
a3: <T>(x: T) => string; // ok because base returns void
>a3 : <T>(x: T) => string
>T : T
>x : T
>T : T
}
interface Base2 { // T
>Base2 : Base2
// M's
a: (x: number) => number;
>a : (x: number) => number
>x : number
a2: <T>(x: T) => T;
>a2 : <T>(x: T) => T
>T : T
>x : T
>T : T
>T : T
}
// S's
interface I2 extends Base2 {
>I2 : I2
>Base2 : Base2
// N's
a: (x: number) => string; // error because base returns non-void;
>a : (x: number) => string
>x : number
}
// S's
interface I3 extends Base2 {
>I3 : I3
>Base2 : Base2
// N's
a2: <T>(x: T) => string; // error because base returns non-void;
>a2 : <T>(x: T) => string
>T : T
>x : T
>T : T
}
}