TypeScript/tests/baselines/reference/emptyObjectNotSubtypeOfIndexSignatureContainingObject1.types
Anders Hejlsberg c456bbd466
Support re-aliasing of type alias instantiations (#42284)
* New aliases for type alias instantiations

* New aliases for conditional, mapped, and anonymous object type instantiations

* Accept new baselines

* Fix issues with re-aliasing

* Accept new baselines
2021-01-11 13:29:46 -10:00

89 lines
2.3 KiB
Plaintext

=== tests/cases/compiler/emptyObjectNotSubtypeOfIndexSignatureContainingObject1.ts ===
// This should behave the same as emptyObjectNotSubtypeOfIndexSignatureContainingObject2.ts
// Begin types from Lodash.
interface Dictionary<T> {
[index: string]: T;
>index : string
}
interface NumericDictionary<T> {
[index: number]: T;
>index : number
}
type ObjectIterator<TObject, TResult> = (
>ObjectIterator : ObjectIterator<TObject, TResult>
value: TObject[keyof TObject],
>value : TObject[keyof TObject]
key: string,
>key : string
collection: TObject
>collection : TObject
) => TResult;
type DictionaryIterator<T, TResult> = ObjectIterator<Dictionary<T>, TResult>;
>DictionaryIterator : DictionaryIterator<T, TResult>
// In lodash.d.ts this function has many overloads, but this seems to be the problematic one.
function mapValues<T, TResult>(
>mapValues : <T, TResult>(obj: Dictionary<T> | NumericDictionary<T> | null | undefined, callback: DictionaryIterator<T, TResult>) => Dictionary<TResult>
obj: Dictionary<T> | NumericDictionary<T> | null | undefined,
>obj : Dictionary<T> | NumericDictionary<T>
>null : null
callback: DictionaryIterator<T, TResult>
>callback : DictionaryIterator<T, TResult>
): Dictionary<TResult> {
return null as any;
>null as any : any
>null : null
}
// End types from Lodash.
interface Foo {
foo: string;
>foo : string
}
interface Bar {
bar: string;
>bar : string
}
export function fooToBar(
>fooToBar : (foos: Record<string, Foo>) => Record<string, Bar | null>
foos: Record<string, Foo>
>foos : Record<string, Foo>
): Record<string, Bar | null> {
>null : null
const result = foos == null ? {} : mapValues(foos, f => f.foo);
>result : Dictionary<string>
>foos == null ? {} : mapValues(foos, f => f.foo) : Dictionary<string>
>foos == null : boolean
>foos : Record<string, Foo>
>null : null
>{} : {}
>mapValues(foos, f => f.foo) : Dictionary<string>
>mapValues : <T, TResult>(obj: Dictionary<T> | NumericDictionary<T>, callback: DictionaryIterator<T, TResult>) => Dictionary<TResult>
>foos : Record<string, Foo>
>f => f.foo : (f: Foo) => string
>f : Foo
>f.foo : string
>f : Foo
>foo : string
// This line _should_ fail, because `result` is not the right type.
return result;
>result : Dictionary<string>
}