0e905be42b
* Switch index signature storage to 'indexInfos: IndexInfo[]' property * Accept new baselines * Remove another usage of IndexKind enum * Update getIndexedAccessType and resolveMappedTypeMembers * Accept new baselines * Update grammar checking for index signatures * Accept new baselines * Consider all index signatures in mapped types and union types * Accept new baselines * Update getIndexType * Accept new baselines * Intersect multiple applicable index signatures * Use getApplicableIndexInfo instead of hardwired string/number handling * Update index signature relationship checking * Report type for which index signature is missing * Report type for which index signature is missing * Accept new baselines * Make 'number' index signatures consistently apply to numeric strings * Accept new baselines * Update fourslash test * Revise index constraint checking * Accept new baselines * Update error messages * Accept new baselines * Update type inference from index signatures * Update isKnownProperty * Update contextual typing based on index signatures * Accept new baselines * Support union types in index signature declarations * Accept new baselines * Check duplicate index signatures / remove redundant template literals from unions with string * Accept new baselines * Include key type in diagnostic / check symbol-named properties * Accept new baselines * Minor fix * Add tests * Accept new baselines * Add optimized findApplicableIndexInfoForName * Accept new baselines * Another place we don't need to obtain literal type for property name * Accept new baselines * Don't create literal types that are going to be discarded * Individual maps for string, number, bigint, and enum literal types * Remove ineffective optimizations * Accept new baselines * Permit intersections as key types in index signatures * Index expression in element access is template literal context * Add tests * Accept new baselines * Symbol index signatures from object literals with computed symbol properties * Accept new baselines * Add more tests * Accept new baselines * Implement Go To Definition for all applicable index signatures * Add fourslash test * Accept new API baselines
53 lines
1.9 KiB
Plaintext
53 lines
1.9 KiB
Plaintext
tests/cases/compiler/emptyObjectNotSubtypeOfIndexSignatureContainingObject1.ts(41,3): error TS2322: Type 'Dictionary<string>' is not assignable to type 'Record<string, Bar>'.
|
|
'string' index signatures are incompatible.
|
|
Type 'string' is not assignable to type 'Bar'.
|
|
|
|
|
|
==== tests/cases/compiler/emptyObjectNotSubtypeOfIndexSignatureContainingObject1.ts (1 errors) ====
|
|
// This should behave the same as emptyObjectNotSubtypeOfIndexSignatureContainingObject2.ts
|
|
// Begin types from Lodash.
|
|
interface Dictionary<T> {
|
|
[index: string]: T;
|
|
}
|
|
|
|
interface NumericDictionary<T> {
|
|
[index: number]: T;
|
|
}
|
|
|
|
type ObjectIterator<TObject, TResult> = (
|
|
value: TObject[keyof TObject],
|
|
key: string,
|
|
collection: TObject
|
|
) => TResult;
|
|
|
|
type DictionaryIterator<T, TResult> = ObjectIterator<Dictionary<T>, TResult>;
|
|
|
|
// In lodash.d.ts this function has many overloads, but this seems to be the problematic one.
|
|
function mapValues<T, TResult>(
|
|
obj: Dictionary<T> | NumericDictionary<T> | null | undefined,
|
|
callback: DictionaryIterator<T, TResult>
|
|
): Dictionary<TResult> {
|
|
return null as any;
|
|
}
|
|
// End types from Lodash.
|
|
|
|
interface Foo {
|
|
foo: string;
|
|
}
|
|
|
|
interface Bar {
|
|
bar: string;
|
|
}
|
|
|
|
export function fooToBar(
|
|
foos: Record<string, Foo>
|
|
): Record<string, Bar | null> {
|
|
const result = foos == null ? {} : mapValues(foos, f => f.foo);
|
|
// This line _should_ fail, because `result` is not the right type.
|
|
return result;
|
|
~~~~~~~~~~~~~~
|
|
!!! error TS2322: Type 'Dictionary<string>' is not assignable to type 'Record<string, Bar>'.
|
|
!!! error TS2322: 'string' index signatures are incompatible.
|
|
!!! error TS2322: Type 'string' is not assignable to type 'Bar'.
|
|
}
|
|
|