Ensure static index signatures have an errorNode available

This commit is contained in:
Wesley Wigham
2021-05-17 12:17:52 -07:00
parent 9eab33463c
commit 7a9854c4a4
2 changed files with 38 additions and 0 deletions
+5
View File
@@ -36898,6 +36898,11 @@ namespace ts {
const someBaseTypeHasBothIndexers = forEach(getBaseTypes(<InterfaceType>type), base => getIndexTypeOfType(base, IndexKind.String) && getIndexTypeOfType(base, IndexKind.Number));
errorNode = someBaseTypeHasBothIndexers || !type.symbol.declarations ? undefined : type.symbol.declarations[0];
}
if (!errorNode) {
// `getIndexDeclarationOfSymbol` does not return the declarations for static index signatures, since they
// come from the __index symbol in the `exports` table of the symbol, and not the `members` table
errorNode = getIndexInfoOfType(type, IndexKind.Number)?.declaration || getIndexInfoOfType(type, IndexKind.String)?.declaration;
}
}
if (errorNode && !isTypeAssignableTo(numberIndexType!, stringIndexType!)) { // TODO: GH#18217
@@ -0,0 +1,33 @@
tests/cases/conformance/classes/staticIndexSignature/staticIndexSignature3.ts(12,5): error TS2413: Numeric index type '1' is not assignable to string index type 'boolean'.
==== tests/cases/conformance/classes/staticIndexSignature/staticIndexSignature3.ts (1 errors) ====
class B {
static readonly [s: string]: number;
static readonly [s: number]: 42 | 233
}
class D extends B {
static readonly [s: string]: number
}
class ED extends D {
static readonly [s: string]: boolean
static readonly [s: number]: 1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
!!! error TS2413: Numeric index type '1' is not assignable to string index type 'boolean'.
}
class DD extends D {
static readonly [s: string]: 421
}
const a = B["f"];
const b = B[42];
const c = D["f"]
const d = D[42]
const e = ED["f"]
const f = ED[42]
const g = DD["f"]
const h = DD[42]