tests/cases/conformance/types/members/objectTypeWithStringAndNumberIndexSignatureToAny.ts(43,5): error TS2322: Type 'Obj' is not assignable to type 'NumberTo'. Index signature for type 'number' is missing in type 'Obj'. tests/cases/conformance/types/members/objectTypeWithStringAndNumberIndexSignatureToAny.ts(49,5): error TS2739: Type 'StringTo' is missing the following properties from type 'Obj': hello, world tests/cases/conformance/types/members/objectTypeWithStringAndNumberIndexSignatureToAny.ts(50,5): error TS2739: Type 'NumberTo' is missing the following properties from type 'Obj': hello, world tests/cases/conformance/types/members/objectTypeWithStringAndNumberIndexSignatureToAny.ts(51,5): error TS2739: Type 'StringAndNumberTo' is missing the following properties from type 'Obj': hello, world tests/cases/conformance/types/members/objectTypeWithStringAndNumberIndexSignatureToAny.ts(61,5): error TS2322: Type 'Obj' is not assignable to type 'NumberTo'. tests/cases/conformance/types/members/objectTypeWithStringAndNumberIndexSignatureToAny.ts(65,5): error TS2322: Type 'Obj' is not assignable to type 'StringTo & NumberTo'. Type 'Obj' is not assignable to type 'NumberTo'. Index signature for type 'number' is missing in type 'Obj'. tests/cases/conformance/types/members/objectTypeWithStringAndNumberIndexSignatureToAny.ts(67,5): error TS2322: Type 'StringTo' is not assignable to type 'Obj'. tests/cases/conformance/types/members/objectTypeWithStringAndNumberIndexSignatureToAny.ts(68,5): error TS2322: Type 'NumberTo' is not assignable to type 'Obj'. tests/cases/conformance/types/members/objectTypeWithStringAndNumberIndexSignatureToAny.ts(69,5): error TS2739: Type 'StringTo & NumberTo' is missing the following properties from type 'Obj': hello, world tests/cases/conformance/types/members/objectTypeWithStringAndNumberIndexSignatureToAny.ts(84,5): error TS2322: Type 'Obj' is not assignable to type 'NumberToNumber'. Index signature for type 'number' is missing in type 'Obj'. tests/cases/conformance/types/members/objectTypeWithStringAndNumberIndexSignatureToAny.ts(88,5): error TS2322: Type 'Obj' is not assignable to type 'StringToAnyNumberToNumber'. Index signature for type 'number' is missing in type 'Obj'. tests/cases/conformance/types/members/objectTypeWithStringAndNumberIndexSignatureToAny.ts(90,5): error TS2322: Type 'StringTo' is not assignable to type 'Obj'. tests/cases/conformance/types/members/objectTypeWithStringAndNumberIndexSignatureToAny.ts(91,5): error TS2739: Type 'NumberTo' is missing the following properties from type 'Obj': hello, world ==== tests/cases/conformance/types/members/objectTypeWithStringAndNumberIndexSignatureToAny.ts (13 errors) ==== // When checking compatibility between two types, // TypeScript should not require an index signature if // the target side index signature maps to `any` *and* // the target side has *any* string index signature to `any`. // // So an index signature like in // // { [x: number]: any } // // is still required of a source type, but neither index signature in // // { [x: number]: any, [x: string]: any; } // // should be required; *however*, the number index signature in // // { [x: number]: number, [x: string]: any; } // // should always be required. interface StringTo { [x: string]: T; } interface NumberTo { [x: number]: T; } interface StringAndNumberTo extends StringTo, NumberTo { } interface Obj { hello: string; world: number; } function f1(sToAny: StringTo, nToAny: NumberTo, bothToAny: StringAndNumberTo, someObj: Obj) { sToAny = nToAny; sToAny = bothToAny; sToAny = someObj; nToAny = sToAny; nToAny = bothToAny; nToAny = someObj; ~~~~~~ !!! error TS2322: Type 'Obj' is not assignable to type 'NumberTo'. !!! error TS2322: Index signature for type 'number' is missing in type 'Obj'. bothToAny = sToAny; bothToAny = nToAny; bothToAny = someObj; someObj = sToAny; ~~~~~~~ !!! error TS2739: Type 'StringTo' is missing the following properties from type 'Obj': hello, world someObj = nToAny; ~~~~~~~ !!! error TS2739: Type 'NumberTo' is missing the following properties from type 'Obj': hello, world someObj = bothToAny; ~~~~~~~ !!! error TS2739: Type 'StringAndNumberTo' is missing the following properties from type 'Obj': hello, world } function f2(sToAny: StringTo, nToAny: NumberTo, bothToAny: StringTo & NumberTo, someObj: Obj) { sToAny = nToAny; sToAny = bothToAny; sToAny = someObj; nToAny = sToAny; nToAny = bothToAny; nToAny = someObj; ~~~~~~ !!! error TS2322: Type 'Obj' is not assignable to type 'NumberTo'. bothToAny = sToAny; bothToAny = nToAny; bothToAny = someObj; ~~~~~~~~~ !!! error TS2322: Type 'Obj' is not assignable to type 'StringTo & NumberTo'. !!! error TS2322: Type 'Obj' is not assignable to type 'NumberTo'. !!! error TS2322: Index signature for type 'number' is missing in type 'Obj'. someObj = sToAny; ~~~~~~~ !!! error TS2322: Type 'StringTo' is not assignable to type 'Obj'. someObj = nToAny; ~~~~~~~ !!! error TS2322: Type 'NumberTo' is not assignable to type 'Obj'. someObj = bothToAny; ~~~~~~~ !!! error TS2739: Type 'StringTo & NumberTo' is missing the following properties from type 'Obj': hello, world } type NumberToNumber = NumberTo; interface StringToAnyNumberToNumber extends StringTo, NumberToNumber { } function f3(sToAny: StringTo, nToNumber: NumberToNumber, strToAnyNumToNum: StringToAnyNumberToNumber, someObj: Obj) { sToAny = nToNumber; sToAny = strToAnyNumToNum; sToAny = someObj; nToNumber = sToAny; nToNumber = strToAnyNumToNum; nToNumber = someObj; ~~~~~~~~~ !!! error TS2322: Type 'Obj' is not assignable to type 'NumberToNumber'. !!! error TS2322: Index signature for type 'number' is missing in type 'Obj'. strToAnyNumToNum = sToAny; strToAnyNumToNum = nToNumber; strToAnyNumToNum = someObj; ~~~~~~~~~~~~~~~~ !!! error TS2322: Type 'Obj' is not assignable to type 'StringToAnyNumberToNumber'. !!! error TS2322: Index signature for type 'number' is missing in type 'Obj'. someObj = sToAny; ~~~~~~~ !!! error TS2322: Type 'StringTo' is not assignable to type 'Obj'. someObj = nToNumber; ~~~~~~~ !!! error TS2739: Type 'NumberTo' is missing the following properties from type 'Obj': hello, world someObj = someObj; }