Подпись индекса должна быть совместима со ВСЕМИ членами типа.Это включает в себя методы класса.
Лучшим решением было бы не использовать фактический класс для хранения этих динамических значений.Используйте отдельный выделенный объект, который вы можете держать в поле.Это позволяет избежать случайного переопределения методов класса (например, кто-то может вызвать fnset('fnset', '', 0)
и переопределить метод `fnset)
class TMatrix<TYPE>{
data: { [idRow: string]: { [idCol: string]: TYPE } } = {};
fnset(nmRow: string, nmCol: string, value: TYPE ) {
if (!this.data[nmRow])
this.data[nmRow] = {};
this.data[nmRow][nmCol] = value;
}
buildHtmlTable(){
}
}
Если вы действительно хотите сохранить данные в классе, вам нужно сделать подпись индексасовместим со всеми членами:
class TMatrix<TYPE>{
[idRow: string]: { [idCol: string]: TYPE } | TMatrix<TYPE>[keyof TMatrix<TYPE>]
fnset(nmRow: string, nmCol: string, value: TYPE) {
const data = this[nmRow];
if (!data) {
this[nmRow] = data;
}
if (typeof data === 'function') { // gurad agains overriding memebers, depeding on class memebers this may have to change to exclude other members, this works if you only have extra methods, no other fields
throw "don't override methods"
}
data[nmCol] = value
}
buildHtmlTable(){
}
}