
Котяй Негодяй
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, если не указан, то еще добавит файл в список зависимостей, чтобы потом чекер прогнать

Alexander
30.12.2016
14:56:21

Aleh
30.12.2016
14:56:39
ts-loader
tsc только файлы из include/files берет

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

Aleh
30.12.2016
16:04:53

Aleksey
30.12.2016
16:07:55

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

Aleksey
30.12.2016
16:08:56

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

Aleh
30.12.2016
16:11:06
а, это да)
но files учитывает

draft
30.12.2016
21:28:00


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

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
Да, возвращаются.