@typescript_ru

Страница 143 из 669
Котяй Негодяй
29.12.2016
21:44:18
#flow. Допустим, у меня есть type Func1Type = () => void; const func1: Func1Type = () => {}; и type Func2Type = () => Func1Type; const func2: Func2Type = () => {}; (при этом func2 не зависит от func1). Тип Func2Type лучше объявлять в отдельном файле и импортировать в обе функции или же использовать import func1 from './func1'; type Func2Type = () => typeof func1; const func2: Func2Type = () => {}; ?

Oleg
30.12.2016
06:48:15
Кто как тесты под реакт с тайпскриптом пишет?

Как их исключить из сборки приложения, но оставлять рядом с кодом?

Aleh
30.12.2016
07:03:09
Web pack отделяет их от кода

Google
Oleg
30.12.2016
07:23:31
каким образом?

Aleksey
30.12.2016
07:29:56
каким образом?
Ну так вебпак резолвит модули. Если ты тесты в коде не подключаешь то они и в сборку не попадают.

Dreamerinnoise
30.12.2016
08:05:35
Я контекстом билд готовлю

Oleg
30.12.2016
12:24:28
есть мнение что ts-loader будет компилить все, вне зависимости от эксклудов

Aleh
30.12.2016
12:25:53
эм, нет

он компилит только то, что говорит ему webpack

Oleg
30.12.2016
12:27:26
как проверить что если файл не реквайрится, то его ts не компилит?

Gordey
30.12.2016
12:34:50
можно через лоадер подебажить

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

Aleh
30.12.2016
12:40:14
+

Oleg
30.12.2016
12:51:27
еще раз. вопрос не про бандл, а про то будет ли ts эти файлы компилить

Aleh
30.12.2016
12:52:08
что значит компилить?

Oleg
30.12.2016
13:14:44
ts-loader вызывает tsc, тот компилит ts в esX

Google
.
30.12.2016
13:21:28
ну да

Aleh
30.12.2016
13:22:05
не tsc, а через api создает host или компилятор и компилит\

Gordey
30.12.2016
13:22:11
лоадеры работают по маске. ts-loader сработает, когда вебпак увидит подключение файла с соответствующим расширением в дереве ентри поинта

Aleh
30.12.2016
13:26:30
если указан transpileOnly, то он через typescript api просто перегонит содержимое одного файла в нужный target, если не указан, то еще добавит файл в список зависимостей, чтобы потом чекер прогнать

Aleh
30.12.2016
14:56:39
ts-loader

tsc только файлы из include/files берет

Anatoly
30.12.2016
16:04:26
Тс лодеру пофиг на энтри пойнт

Anatoly
30.12.2016
16:08:39
Прошу прощения, на инклуды ему пофиг, которые в тс конфигурации

Anatoly
30.12.2016
16:09:53
Я разбирался с этим в своё время, думал мб время сборки уменьшиться если файлы прописать, но нет.

Aleh
30.12.2016
16:11:06
а, это да)

но files учитывает

draft
30.12.2016
21:28:00
Как задекларировать обязательные методы для класса? Желательно чтобы интерфейс был у родителя. export class Env extends Module {} А у Module как-то прописать методы которые должны быть у его наследников.
любой тип имплементирующий интерфейс берет на себя обязательства реализовать публичный контракт. Все что описано в интерфейсе и не является опциональным должно быть реализовано в типе.

Я может фигню пишу, хочу понять как лучше. Цель описал выше – сделать обязательными некоторые методы у наследников без которых бы валилось. Еще интересно как сделать обязательными статичные свойства у наследников.
тип обязан реализовать или интерфейс который имплементирует или тот контракт который поставляет ему родитель. В родителе можно задать абстрактные свойства и методы, тогда наследник будет обязан их реализовать. можно абстрактный класс юзать для таких целей

Alexander
30.12.2016
21:46:23
В тс работают интерфейсы.
Вопрос-то про флоу был

draft
30.12.2016
21:47:11
Оу, не так понял, прошу прощения

Google
Aleksey
31.12.2016
07:34:27
:(

Vasiliy
31.12.2016
17:56:52
хм, а так в ts нельзя ведь пока ?

<D, E = any> мб где-то есть ишью или пр нашел, https://github.com/Microsoft/TypeScript/issues/2175

чет я как-то проворонил вот эту штуку https://github.com/Microsoft/TypeScript/wiki/What's-new-in-TypeScript#non-null-assertion-operator

Vladimir
31.12.2016
19:57:49
Абсолютно бесполезная вещь

Vasiliy
31.12.2016
19:58:14
а как по-другому?

Vladimir
31.12.2016
19:58:23
if

Vasiliy
31.12.2016
19:58:32
так там и так ноннул 100%, он просто не может вывести это

Vladimir
31.12.2016
19:59:17
ну это глупо писать такой код, когда можно написать тоже самое безопасно

Vasiliy
31.12.2016
20:02:43
значит я мб просто не знаю как написать это безопасно, либо это сложнее, чем нужно

Vladimir
31.12.2016
20:03:33
Просто if пиши и бросай

Либо сделай одну функцию, которая это делает

Vasiliy
31.12.2016
20:03:49
просто это добавляет в рантайм, а я уверен что там не нулл

Vladimir
31.12.2016
20:04:05
const x = unwrap(maybeX)

Единственный способ быть уверенным - это проверить

Vasiliy
31.12.2016
20:04:29
если в определении интерфейса (типа) поле nullable, а я знаю, что там не нул приходит

Vladimir
31.12.2016
20:04:54
Такого не должно быть в нормальных ситуациях

Vasiliy
31.12.2016
20:05:56
ну да, согласен, в определениях типов, которые пишу я такого нет, вроде бы, не помню точно

Ҫѐҏӗѫӑ
31.12.2016
20:20:21
null не нужен

всем нон нуллабл в новом году

Google
Anatoly
31.12.2016
21:09:00
?

Vasiliy
01.01.2017
12:10:49
хм

type ActionFunction2<T1, T2, R> = (t1: T1, t2: T2) => R;

а как тут указать, то t1 nullable? извне export function createAction<Payload, Arg1, Arg2>( actionType: string, payloadCreator: ActionFunction2<Arg1, Arg2, Payload> ): ActionFunction2<Arg1, Arg2, Action<Payload>>;

createAction<Object, string, Blah?> – вот так нельзя, а как по-другому?

Aleh
01.01.2017
12:18:53
| null?

Admin
ERROR: S client not available

Vasiliy
01.01.2017
12:20:53
ой, блин, точно) спасибо, затупил чего-то я

а, ну да, все равно так нельзя

Aleh
01.01.2017
12:23:24
О.о

Vasiliy
01.01.2017
12:23:29
если не передать ему аргумент, будет ругаться

сек, покажу что я имею ввиду в репле

Aleh
01.01.2017
12:23:38
| undefined

Vasiliy
01.01.2017
12:23:41
пробовал)

Aleh
01.01.2017
12:26:05
ну вообще да, не работает)

ну придется явно let blahblah = undefined; f(blahblah); )

вообще ты хочешь странных вещей, должен тебе сказать)

Vasiliy
01.01.2017
12:27:36
да, ну ладно, мне кажется я опять заморачиваюсь, это странные вообще тайпинги для штуки, которая возможно потом выпилится

да, согласен, это из-за вот этих странных тайпингов для той штуки

Aleh
01.01.2017
13:01:18
https://github.com/adamcarr/typescript-definition-tester чет не могу понять, чем tsc --noEmit не подходит О.о

Google
Aleh
01.01.2017
13:32:18
даже с mapped types для react-redux все еще нельзя запилить connect, который возвращает нормальный компонент без лишнего?(

Vadim
02.01.2017
11:45:24
Люди, у меня вопрос по использованию react-redux с typescript. Как в typescript корректно прописать метод connect для react-redux? Дело в том, что если я добавляю через mapStateToProps какие-то проперти, то компилятор начинает их требовать в defaultProps компонента. Нужно что б компонент получал какие-то проперти через параметры "стандартным" методом, типа <Component someProp="lalala"> , а какие-то проперти (например, "dispatch") он должен получать из стора при помощи connect. Но если я выдаю dispatch в методе connect, тогда компилятор говорит что в defaultProps никакого dispatch не указано. Как быть?

Как вы вообще прописываете connect?

andretshurotshka?❄️кде
02.01.2017
11:49:44
connect<StateProps, DispatchProps, any>(...)()

Vadim
02.01.2017
11:51:14
connect<StateProps, DispatchProps, any>(...)()
Это понятно. Но как сделать так что б компилятор не ругался что в defaultProps не прописано поле dispatch и другие поля, которые добавляются через connect?

draft
02.01.2017
11:51:39
покажи свой коннект лучше

Vadim
02.01.2017
11:54:11
Вот тестовый вариант: interface DefaultDispatchProps { dispatch: Dispatch<SimpleAction>; } interface MappedProps extends Props{ qqq?: number; } const mapStateToProps = (state: StoreStructure, ownProps?: Props): MappedProps => { return assign({}, ownProps, { qqq: 12 }); }; const mapDispatchToProps = (dispatch: Dispatch<SimpleAction>): DefaultDispatchProps => { return { dispatch }; }; export default connect<MappedProps, DefaultDispatchProps, any>( mapStateToProps, mapDispatchToProps )(Table);

И еще, у компонента есть кое-какие обязательные поля. Так вот, компилятор требует что б эти обязательные поля возвращались из connect

draft
02.01.2017
11:56:21
Table какие проперти принимает?

Vadim
02.01.2017
11:56:40
interface Props { id: number; type?: TableType; currentSession?: TableSession; lastSession?: TableSession; name?: string; isInPending?: boolean; isDisabled?: boolean; } class Table extends React.Component<MappedProps & DefaultDispatchProps, State> { static defaultProps = { type: 'generic', name: 'No Name', isInPending: false, isDisabled: false };

И вот, компилятор начинает требовать что б я из connect передал, например "id", так как он обязательный

andretshurotshka?❄️кде
02.01.2017
11:58:53
А зачем экстендить mappedprops от props

Vadim
02.01.2017
12:00:43
Ну Props это те параметры, которые должны передаваться при использовании компонента в качестве тега. А MappedProps это они же плюс поля, которые добавляет connect

Сейчас попытаюсь упростить код )

andretshurotshka?❄️кде
02.01.2017
12:01:14
А понял

Vadim
02.01.2017
12:04:11
Да, возвращаются.

Страница 143 из 669