
dima
04.09.2017
03:28:44
Мне вот тоже. Я так т не понял как правильно их описать

Golodnyi
04.09.2017
08:17:51
Кто в vscode пишет, зайдите в лс

Max
04.09.2017
08:18:09

Ostap
04.09.2017
08:50:00

Google

Павел
04.09.2017
14:41:58
Всем привет, подскажите какой нибудь продвинутый курс по typescript ?!

Andrey
04.09.2017
14:44:20
https://egghead.io/courses#technology-typescript

Mike
04.09.2017
15:16:29

Alex
04.09.2017
22:14:24
Всем хай
Есть идеи как вытянуть параметры из дженерика второго уровня?

Mike
04.09.2017
22:14:57
Нужен пример кода, что хочешь сделать

andretshurotshka?❄️кде
04.09.2017
22:15:06
HKT что ли)

Ivan
04.09.2017
22:17:06
есть идея, зависит от того что у тебя на первом уровне
если имеются ввиду структуры данных типа Array<....> или там свой List<...> то можно извратиться с трансформами

Mike
04.09.2017
22:20:59
да нам ещё задача не понятна от слова совсем

Alex
04.09.2017
22:26:33
пишу
сейчас все будет)
https://gist.github.com/fend25/5a2ee30d83fa964d5b75e85bfac90ff8

Google

Alex
04.09.2017
22:34:10
суть: я хочу сразу чтобы было как на 13 строке
но работает только первый варинт (на 10 строке)

Maxim
04.09.2017
22:34:27
не открывается

Alex
04.09.2017
22:34:33
потому что приходится два тайпинга писать фактически - и на A и на Action
а сейчас?

Дмитрий
04.09.2017
22:35:01
Открылось
Чет странная конструкция

Alex
04.09.2017
22:35:27
ActionCreatorFactory для redux

Дмитрий
04.09.2017
22:35:36
По крайней мере я сходу смысл не оч уловил, для чего именно так)

Alex
04.09.2017
22:36:18
ну типа есть примитивная задача - взять ActionType и сделать функцию, которая будет (о чудо!) брать payload и возвращать {type, payload}

Maxim
04.09.2017
22:36:28
Так-так, перепиливал для себя эту штуку - активно юзаю

Alex
04.09.2017
22:36:47
const factory = type => payload => ({type, payload})

andretshurotshka?❄️кде
04.09.2017
22:37:06
перегрузить для action?

Alex
04.09.2017
22:37:14
и я хочу, чтобы оно параметризировалось сразу экшеном, а не пейлодом
а пейлод вытягивало из экшена

Maxim
04.09.2017
22:37:48
я фигачил туда функцию ofType(action:Action) => action is Payload

Alex
04.09.2017
22:38:17

Maxim
04.09.2017
22:38:32
ofType (actionFactory<Payload>) => (action:Action) => action is Payload
под рукой нет

andretshurotshka?❄️кде
04.09.2017
22:39:28
function factory<A extends number>(type: string) => (a: A): Action<A> => ({type, a})
function factory<T, A extends Action<T>>(type: string) => (a: T): Action<A> => ({type, a})
хотя мб я не понял что надо)

Google

Maxim
04.09.2017
22:39:45
напиши ofType с типом (factory:ActionFactory<P>) => (action:Action<P>) => action is Action<P>

Alex
04.09.2017
22:41:33
export const defaultCreator =
<Payload =IPayload, Meta =IMeta>(type: IActionType): ICreator<Payload, Meta> =>
(payload: Payload, meta?: Meta): Action<Payload, Meta> => ({type, payload, meta})

Дмитрий
04.09.2017
22:54:27
?
Это наоборот вообще скорее) type guard


Maxim
04.09.2017
23:00:42
https://www.typescriptlang.org/play/#src=type%20Action%3CP%3E%20%3D%20%7B%0D%0A%20%20%20%20type%3A%20string%0D%0A%20%20%20%20payload%3A%20P%0D%0A%7D%0D%0A%0D%0Atype%20ActionCreator%3CP%3E%20%3D%20(payload%3AP)%20%3D%3E%20Action%3CP%3E%0D%0A%0D%0Atype%20ActionFactory%3CP%3E%20%3D%20ActionCreator%3CP%3E%20%26%20%7Btype%20%3A%20string%7D%0D%0A%0D%0Aconst%20actionFactory%20%3D%20%3CP%3E(type%3Astring)%20%3A%20ActionFactory%3CP%3E%20%3D%3E%20%0D%0A%20%20%20%20%20%20%20%20Object.assign(%20%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20%7Btype%7D%2C%20%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20(payload)%20%3D%3E%20(%7Btype%2C%20payload%7D)%0D%0A%20%20%20%20%20%20%20%20)%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%0D%0A%0D%0Aconst%20ofType%20%3D%20%3CP%3E(factory%3AActionFactory%3CP%3E)%20%3D%3E%20(action%3AAction%3CP%3E)%20%3A%20action%20is%20Action%3CP%3E%20%3D%3E%0D%0A%20%20%20%20%20%20%20%20factory.type%20%3D%3D%20action.type%0D%0A%0D%0Alet%20myFactory%20%3D%20actionFactory%3C%7Bname%3Astring%7D%3E('USER_PAYLOAD')%0D%0A%0D%0Alet%20myAction%3Aany%20%3D%20myFactory(%7Bname%3A%22Hello%22%7D)%0D%0A%0D%0Aif(ofType(myFactory)(myAction))%20%7B%0D%0A%20%20%20%20console.log(myAction.payload.name)%0D%0A%7D%0D%0A
на фабрику можно сделать алиас, т.к. сам экшон ничем кроме payload не параметризуется
ну и матчить тайпгардом забывая про имя экшена навсегда
констант ещё блин не хватало )


Alex
04.09.2017
23:06:00
ага

Maxim
04.09.2017
23:08:53
let myFactory = actionFactory<{name:string}?'USER_PAYLOAD')
вот это то, о чём мучал чат по flow

Alex
04.09.2017
23:10:02
и еще такой вопрос
у нас есть например интерфейс
interface Out<Generic =number> {
param Generic
}
мы можем вытащить тип Generic или param у экземпляра?
ну типа Out.Generic
или Out.param

Maxim
04.09.2017
23:10:38
param Generic
это что?

Alex
04.09.2017
23:10:56
тип
параметризованный интерфейс

Maxim
04.09.2017
23:11:18
param:Generic что ли ?

Дмитрий
04.09.2017
23:11:25
Модерновый синтаксис однако

Google

Дмитрий
04.09.2017
23:11:41
Как вы там потомки

Alex
04.09.2017
23:12:56
interface Action<Payload> {
payload: Payload
}
const action = Action<number>
возможно ли здесь вытащить number
например
type b = action:payload
или типа того

Maxim
04.09.2017
23:13:48
в рантайме - нет

Дмитрий
04.09.2017
23:13:54
В ts скорее всего нельзя

Alex
04.09.2017
23:13:58
в компайл тайме

Maxim
04.09.2017
23:14:29
куда его надо вытащить и зачем ?

Дмитрий
04.09.2017
23:14:51
Ну бывает такая необходимость

Alex
04.09.2017
23:14:59
параметризовать что-то намбером
вот тем самым оттуда

Maxim
04.09.2017
23:15:16
if(ofType(myFactory)(myAction))
console.log(myAction.payload.name)
тайпгардом "вытащить" можно

Дмитрий
04.09.2017
23:15:38
Я бы просто посоветовал юзать type level function, которая вытащит тип дженерика непосредственно, но это будет слегка другой язык

Alex
04.09.2017
23:16:01
haskell?)

Maxim
04.09.2017
23:16:02
ну если он сработает, в блоке тайпгарда - у тепя тип тайпгарды

Alex
04.09.2017
23:16:24
это не совсем то, но спасибо)

Дмитрий
04.09.2017
23:16:25
Мне запретили о нем говорить здесь(

Maxim
04.09.2017
23:16:55

Google

Дмитрий
04.09.2017
23:17:04
Догадываюсь))

Vladimir
04.09.2017
23:17:06

Maxim
04.09.2017
23:20:14
и посмотришь как она устроена в TS

Alex
04.09.2017
23:20:41
собственно нужен примитивный compile time)

Maxim
04.09.2017
23:21:32
но
это будет не компайл-тайм

Дмитрий
04.09.2017
23:28:04

Pavel
05.09.2017
00:42:49
интересно, но даже так работает
function foo<T>(test: Action<T>) {
type payload = typeof test.payload;
var p: payload;
}

Дмитрий
05.09.2017
00:49:31

Pavel
05.09.2017
00:49:59
а где тут рантайм?

Дмитрий
05.09.2017
00:51:24
Ну и это не сработает в более общем случае, кога тип есть, а поля в котором находится его дженерик нет (например оно приватное)

Pavel
05.09.2017
00:53:16
без поля да, не сработает. Но рантайма тут и рядом не пробегало

andretshurotshka?❄️кде
05.09.2017
00:56:56
foo это функция в рантайме

Pavel
05.09.2017
00:58:59
для того чтобы получить Payload, нам нужно откуда-то его получить, ваш кэп

Дмитрий
05.09.2017
00:59:15
Нет конечно же

Pavel
05.09.2017
00:59:15
то есть, должна быть инстанация шаблона