Первые шаги в typescript

225
10 апреля 2017, 06:54

В коде я часто использую функцию как объект, то есть:

let a = function () {
    console.log('a');
}
a.b = function () {
    console.log('b');
}
a.c = function () {
    console.log('c');
}
a(); -> a
a.b(); -> b
a.c(); -> c

В typescript такой синтаксис не проходит:

Почему и что делать ?

Answer 1

поставить тип void можно, чтоб обозначить, что будут свойства, которые ничего не будут возвращать

let a:void  = function () {
    console.log('a');
}
a.b = function () {
    console.log('b');
}
a.c = function () {
    console.log('c');
}
a(); 
a.b();
a.c();

http://codepen.io/anon/pen/qrzgRe

Либо можно поставить any — может понадобиться если нужно описать тип переменных, которые мы не знаем, когда пишем приложение.

let a:any = function () {
    console.log('a');
}
a.b = function () {
    console.log('b');
}
a.c = function () {
    console.log('c');
}
a(); 
a.b();
a.c();

Вообще выглядит это странно: функция, а у нее поля еще функции О_о

Может быть вы хотели сделать так:

class A {    
    constructor() {
        // do smth
    }
    b() {
        console.log("b");
    }
    c() {
        console.log("c");
    }
}
let myClass = new A();       
myClass.b();
myClass.c();
Answer 2

Незнаю будет вам удобно или нет, но можете поробовать статические методы.

class A{
    static b(){
        console.log("b")
    }
    static c(){
        console.log("c")
    }
}
A.b()
A.c()

С типом any

let a:any = function(){
    console.log("a")
}
a.b = function(){
    console.log("b")
}
a.c = function(){
    console.log("c")
}
a()
a.b()
a.c()
READ ALSO
Ошибка кросдоменного POST запроса на angularjs

Ошибка кросдоменного POST запроса на angularjs

Отправляем запрос таким кодом:

227
Дан input.Заменить четные символы в строке на знак “?”

Дан input.Заменить четные символы в строке на знак “?”

Использую input и кнопку для получения данных из оногоJs имею такой вот код:

193
как запретить редирект из iframe

как запретить редирект из iframe

Подскажите, пожалуйста

291