Класс, который возвращает значение вместо себя - PullRequest
0 голосов
/ 04 апреля 2019

Есть ли способ сделать класс в typescript, чтобы при использовании его экземпляра он возвращал значение или свойство вместо себя?Например, console.log(myClassInstance) => 1

Когда я впервые попытался сделать это, я подумал, что, может быть, что-то подобное сработает:

class MyClass<T> {

    constructor(private a: T) {}

    get this() { return this.a }
}

Но, к сожалению, этого не произошло.Это сработало: myClassInstance.this => myClassInstance.a, но это побеждает всю цель.Есть ли какой-нибудь возможный способ сделать это?

Редактировать

Некоторые люди спрашивали, почему я хочу этого, и это просто для лучшей читабельности.Если бы я, например, хотел класс Matrix, я мог бы просто использовать вложенный массив, но добавление в него пользовательских функций и свойств было бы просто затруднительным.Кроме того, new Matrix<number>() выглядит намного лучше, чем new Array<Array<number>>

Я знаю, что могу использовать интерфейсы и функции, чтобы создать впечатление, что они создают экземпляр класса, но вместо этого возвращает другое значение: new Matrix<number>() => new Array<Array<number>>(),но я надеюсь, что есть лучший способ использования классов.

1 Ответ

2 голосов
/ 05 апреля 2019

Используйте valueOf() и укажите, какой примитив вы хотите вернуть

class MyClass {
    constructor(a) {this.a = a }
    valueOf() { return this.a }
}


const t = new MyClass(7)

console.log(+t)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...