@typescript_ru

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

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

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
Всем привет, подскажите какой нибудь продвинутый курс по typescript ?!
Если умеешь программировать и знаешь js то ничего лучше чем прочитать handook и все whats new снизу вверх я не знаю https://www.typescriptlang.org/docs/home.html

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
перегрузить для action?
const factory = <A =TA?type: string) вроде уже перегружено или не про то речь?

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
const action = Action<number> возможно ли здесь вытащить number
interface Action<Payload> { payload: Payload } var test: Action<number>; type payload = typeof test.payload;

интересно, но даже так работает 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
то есть, должна быть инстанация шаблона

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