Нужно описывать типы данных в классе, после интерфейса?

154
22 декабря 2018, 18:40

Класс Calculator имплементируется от ICalculator, где описаны все методы и их типы, стоит ли повторно это делать для параметров методов класса ? Если уберу, то в метод можно будет передать любой тип. Подскажите пожалуйста, как правильно написать, только начал изучать TypeScript

interface ICalculator { 
    add(num: number): number; 
    subtract(num: number): number; 
    multiply(num: number): number; 
    divide(num: number): number; 
    print(): void; 
} 
 
class Calculator implements ICalculator { 
    protected _res: number = 0; 
 
    add(num: number) { 
        return this._res = num + this._res ; 
    } 
 
    subtract(num: number) { 
        return this._res = this._res - num; 
    } 
 
    multiply(num: number) { 
        return this._res = num * this._res; 
    } 
 
    divide(num: number) { 
        return this._res = this._res / num; 
    } 
 
    print(): void { 
        console.log(`Currently value: ${this._res}`); 
    } 
} 
let myCalc = new Calculator(); 
 
myCalc.add(260); 
myCalc.subtract(12); 
myCalc.multiply(12); 
myCalc.divide(2); 
myCalc.print();

Answer 1

Делать это не обязательно.

Однако, если нужна проверка типов, в случае не указания типов параметров в самом классе, придется явно указывать интерфейс в качестве типа переменной:

let myCalc:ICalculator = new Calculator();

В этом случае, при попытке вызвать метод с несоответствующим типом параметра будет ошибка.

Пример на playground

READ ALSO
Проверка на строку js

Проверка на строку js

как сделать так, чтобы была проверка на то, что в url есть "?rid=1" например

251
Загрузка документа на JS

Загрузка документа на JS

Как анологичное сделать на чистом JS?

190
как отследить изменение текста в input angular js?

как отследить изменение текста в input angular js?

Есть input, необходимо при его изменении что-то делать, например изменять значение переменной(знаю как), либо (это для меня сложное) изменять...

156