TypeScript/tests/baselines/reference/subtypingWithObjectMembersOptionality2.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

77 lines
1.2 KiB
Text

=== tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/subtypingWithObjectMembersOptionality2.ts ===
// Derived member is optional but base member is not, should be an error
interface Base { foo: string; }
>Base : Base
>foo : string
interface Derived extends Base { bar: string; }
>Derived : Derived
>Base : Base
>bar : string
interface T {
>T : T
Foo: Base;
>Foo : Base
>Base : Base
}
interface S extends T {
>S : S
>T : T
Foo?: Derived // error
>Foo : Derived
>Derived : Derived
}
interface T2 {
>T2 : T2
1: Base;
>Base : Base
}
interface S2 extends T2 {
>S2 : S2
>T2 : T2
1?: Derived; // error
>Derived : Derived
}
interface T3 {
>T3 : T3
'1': Base;
>Base : Base
}
interface S3 extends T3 {
>S3 : S3
>T3 : T3
'1'?: Derived; // error
>Derived : Derived
}
// object literal case
var a: { Foo: Base; }
>a : { Foo: Base; }
>Foo : Base
>Base : Base
var b: { Foo?: Derived; }
>b : { Foo?: Derived; }
>Foo : Derived
>Derived : Derived
var r = true ? a : b; // ok
>r : { Foo: Base; } | { Foo?: Derived; }
>true ? a : b : { Foo: Base; } | { Foo?: Derived; }
>true : true
>a : { Foo: Base; }
>b : { Foo?: Derived; }