2015-10-02 3 views
1

Возможно, мне что-то серьезно не хватает, но я не могу избавиться от проблемы синтаксиса со всеми моими классами.Тип типа подписи типа redundant

Вот пример:

class Foo { 
    bar: (x: string, y: number) => string = (xx: string, yy: number) : string => { 
     // do some stuff... 
    }; 
} 

Поскольку я в жизнь деклараций типа с использованием tslint, ВСЕ мои методы написаны как это. Это ужасно. Чтобы скопировать вставку частей аргументов, переименование имен args между объявлением типа и объявлением лямбда является soooo painfull.

Итак: есть ли лучший способ объединить подпись типа и декларацию лямбда без всякого коленного подергивания? Я искренне надеюсь, что я пропустил что-то и надеюсь, что это не «по дизайну»! :)

+0

поэтому запись 'var bar = (x: строка, y: число): string => {/ * dostuff * /};' недопустимо в соответствии с tslint? – Gustav

+0

Это неверно: вы не можете объявить метод с ключевым словом «var». –

+0

ops, извините, но без 'var', то это вызовет жалобу tslint? – Gustav

ответ

0

Edit:

Если вы ориентируетесь ES5, вы также можете сделать что-то вроде этого:

var bar = (x: string, y: number) : string => { 
    // do some stuff... 
}; 

class Foo { 
    get bar() { return bar; } 
} 

var test = (new Foo).bar('hello', 3); 

Или:

class Foo { 
    get bar() { 
     return (xx: string, yy: number): string => { 
      // do some stuff... 
     }; 
    } 
} 

Этот путь сохраняется контекст метода; и он также существует на прототипе. Также нет необходимости копировать типы аргументов, TSC будет их выводить.

+0

Несколько раз проблемы с этим «контекстом». Поэтому я переключился на назначение лямбда. –

+0

Что это за проблемы? – thoughtrepo

+0

То же, что и https : //stackoverflow.com/questions/15335517/force-typescript-to-put-methods-on-the-instance-not-the-prototype –

3

Вам нужно настроить TSLint для обеспечения типов, но игнорировать тип функций:

ЬурейиЕ претворяют определения типа существовать. Варианты правил:

  • «вызов подписи» проверяет тип возвращаемого значения функций

  • «параметр» проверяет спецификатор типа функции параметров

  • «свойство-декларация» проверки типов возврата свойств интерфейса

  • "переменная-декларация" проверяет объявления переменных

  • «член-переменная декларация» проверяет объявления переменных участниц

Вы можете использовать файл как this one настроить TSLint. И прочитайте this, чтобы узнать больше о том, как его настроить.

+1

[Это] (https: // github. com/palantir/tslint/blob/master/tslint.json), которую мы используем для TSLint. Это довольно разумно, но я бы сказал, не стесняйтесь при настройке. Например, я предпочитаю одиночные кавычки двойные кавычки. – JKillian