Есть ли «перегрузка операторов» в ES6 / TypeScript?(или как сделать объект доступным) - PullRequest
0 голосов
/ 09 октября 2018

Я был в стороне от разработки JS в течение некоторого времени, и мне интересно, есть ли что-то подобное в современном JavaScript или TypeScript?

C ++

struct Functor {
    double operator()(double value) { ... }

Kotlin:

class Whatever {
    operator fun invoke(value: Double): Double { ... }

В ES5 можно было сделать:

var interpolator = function (value) {
    var t = (value - domainStart) / domainDelta
    return (1 - t) * rangeStart + t * rangeEnd;
}
interpolator.invert = function () { ... }
interpolator.setDomain = function (a, b) { ... }
interpolator.setRange = function (a, b) { ... }

// and then use like so
interpolator.setDomain(0, 1)
interpolator.setRange(50, 200)
let rangeValue = interpolator(0.5) // 125

1 Ответ

0 голосов
/ 09 октября 2018

Нет формальной перегрузки оператора (), но метод ES5 отлично работает и в современном JS.

Что касается истории Typescript, ваш код работает почти так же, как в Typescript 3.1

function interpolator(value: number) {
    return value
}
interpolator.invert = function () {  }
interpolator.setDomain = function (a : number, b: number) {  }
interpolator.setRange = function (a: number, b: number) {  }

// and the use like so
interpolator.setDomain(0, 1)
interpolator.setRange(50, 200)
let rangeValue = interpolator(0.5) // 125);

Ссылка Playgrounk

Это связано сновой функции в 3.1 под названием присваивания свойств в объявлениях функций .

До версии 3.1 вам требуется дополнительное пространство имен для достижения правильно типизированной функции с дополнительными членами

function interpolator(value: number) {
    return value
}
namespace interpolator {
    export function invert() { }
    export function setDomain(a: number, b: number) { }
    export function setRange (a: number, b: number) { }
}

// and the use like so
interpolator.setDomain(0, 1)
interpolator.setRange(50, 200)
let rangeValue = interpolator(0.5) // 125); 

Ссылка Playgrounk

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