Typescript выдаст ошибку, если не сможет проверить, является ли используемая строка допустимым членом класса. Это, например, будет работать:
class MyClass {
methodA() {
console.log("A")
}
methodB() {
console.log("B")
}
runOne() {
const random = Math.random() > 0.5 ? "methodA" : "methodB" // random is typed as "methodA" | "methodB"
this[random](); //ok, since random is always a key of this
}
}
В приведенных выше примерах удаление явной аннотации типа из константы должно дать вам литеральный тип и позволить вам использовать const для индексации в this
.
Вы также можете ввести строку как keyof Class
:
class MyClass {
methodA() {
console.log("A")
}
methodB() {
console.log("B")
}
runOne(member: Exclude<keyof MyClass, "runOne">) { // exclude this method
this[member](); //ok
}
}
Если у вас уже есть string
с использованием утверждения для keyof MyClass
, это также вариант, хотя это не является безопасным типом (this[member as keyof MyClass]
где let member: string
)