mirror of
https://github.com/microsoft/TypeScript.git
synced 2025-11-18 17:21:48 +00:00
Ensure static index signatures have an errorNode available
This commit is contained in:
@@ -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]
|
||||
|
||||
Reference in New Issue
Block a user