Плюс - стилистическое оформление.
Мало кто знает про #pragma region
В одном из вопросов пару лет назад он вполне спокойно назвал Джона Кармака идиотом на основании того что тот относит себя к const nazi.
я просто сагрился
Это уже ограничения JS и TS тут не причем.
Typescript поддерживает перегрузку функций, а реализация перегрузки - это уже детали.
Не забывайте что Typescript это Транспайлер, а не Компилятор.
тип данных получаемых через сеть не может быть гарантирован
Если в нем будет неявный кастинг, то какой от него толк? Чем TS тогда будет отличаться от JS?
[перегрузка] эмм... поддерживает
function add(x: string, y: string): string{ // Error: duplicate function implementation
return [x, y].join('+');
}
function add(x: number, y: number): number{ // Error: duplicate function implementation
return x + y;
}
[неявный кастинг] тоже поддерживает
as number
. Да и вообще он странный, ибо практической пользы от такого неуправляемого кастинга минимум.Object.prototype.valueOf
и Object.prototype.toString
. Крайнее работает годно и прогнозируемо, а вот с valueOf
траблы:const MyCustomType = (function () {
function MyCustomType(n) {
this._data = n;
}
MyCustomType.prototype.valueOf = function () {
return this._data;
};
return MyCustomType;
}());
const obj = new MyCustomType(3);
console.log("Value is " + (obj + 2)); // OK
class MyCustomType {
public constructor(n: number) {
this._data = n;
}
public valueOf(): number { // nobody cares )"=
return this._data;
}
private _data: number;
}
const obj = new MyCustomType(3);
// error TS2365: Operator '+' cannot be applied to types 'MyCustomType' and '2'.
console.log(`Value is ${obj + 2}`);
Number, Object... как можно обращаться с ответом также, как ними
myNum1.add( myNum2 )
class Repository {
private _json: string = '{ "num": 3, "arr": [ 1, 2 ] }';
public getNumber(): ServerResponse<number> {
const obj = JSON.parse(this._json);
return new ServerResponse<number>(obj.num);
}
public getNumberList(): ServerResponse<number[]> {
const obj = JSON.parse(this._json);
return new ServerResponse<number[]>(obj.arr);
}
}
class ServerResponse<T> {
// public getStatusCode(): number {...}
// public getHeaders(): string[] {...}
public value(): T {
return this._value;
}
public constructor(value: T) {
this._value = value;
}
private _value: T;
}
// Usage ----------------
const repo = new Repository();
function logNumber(num: ServerResponse<number>): void {
console.log(`I expects number only! The value is ${num.value()}`);
}
logNumber( repo.getNumber() ); // OK
logNumber( repo.getNumberList() ); // Compile-time error!
Не оптимизация, а ее отсутствие)