@typescript_ru

Страница 273 из 669
Сергей
10.07.2017
11:06:56
Expected 2 type arguments, but got 1

втф

Артемий
10.07.2017
11:08:57
ну так один же передал

Google
Max
10.07.2017
11:09:05
и оно нормально работает

Сергей
10.07.2017
11:09:21
ну так один же передал
всмысле один? Два defaultState и объект

Andrey
10.07.2017
11:09:29
и оно нормально работает
Странно, я был уверен что не соберётся. Сейчас попробую

Артемий
10.07.2017
11:09:35
<SigningState>

где второй?

Max
10.07.2017
11:09:38
щас проверю тоже

момент

Сергей
10.07.2017
11:09:42
твою... спасибо

Max
10.07.2017
11:10:38
static async save<T extends {id?: PK}>(data: T): Promise<T> {

даже вот так

Летучая
10.07.2017
11:12:28
static-man

Andrey
10.07.2017
11:12:39
Max
10.07.2017
11:13:06
"typescript": "2.3.4",

Google
Max
10.07.2017
11:13:16
я слава богу не обновлялся

Сергей
10.07.2017
11:13:57
"typescript": "2.3.4",
и не обновишься так просто

это пиздец

Max
10.07.2017
11:14:05
да и не горю )

желанием

Andrey
10.07.2017
11:14:31
лол, мне 2.3.4 говорит, что cannot find name PK, чудны дела твои, Господи

Сергей
10.07.2017
11:14:33
ща надо придумать че с этим делать

Andrey
10.07.2017
11:15:00
А где-то между прочим есть люди, которые пишут код в натуральном вижл студио, собирают с его помощью, и вообще ни про какие обновления ничего не знают)

Andrey
10.07.2017
11:17:49
Сергей
10.07.2017
11:18:01
откатиться на 2.3?
да не Благо проблема только с одной функцией

ща подумать надо

Andrey
10.07.2017
11:26:01
ну правильно, так всё хорошо

Тут проблема в том, что у человека должно происходить наследование от дженерик-типа, но существует не дженерик-тип с таким же именем

export class Action<A> { payload: A; } export type Reducer<S> = <A extends Action>(state: S, action: A) => S;

Не компилируется, что правильно. А на скриншоте эта часть собирается, стал быть существует ещё и не-дженерик Action

Max
10.07.2017
11:28:38
не пони

Action заимпортриован?

Google
Andrey
10.07.2017
11:29:29
Так это ваще не ко мне вопрос, я просто комментирую то, что на скриншотах, и почему тут корректнее написать так, как я написал. Кароч пофиг)

Andrey
10.07.2017
11:30:10
Action requires 1 type argument, конечно

Aleh
10.07.2017
11:30:34
тут какая ошибка?
<A extends Action<any>> типа такого должно быть

Max
10.07.2017
11:30:38
а

стоп

ну вообще да

onDelete: React.EventHandler<React.MouseEvent<HTMLElement>>,

вот например

Nikolay
10.07.2017
12:58:12
а никто еще не писал декларацию для hoist-non-react-statics ?

поделитесь

Artur
10.07.2017
13:08:18
declare module "hoist-non-react-statics" { export default function hoistNonReactStatics<T, S>(targetComponent: T, sourceComponent: S): T & S } declare module "hoist-non-react-methods" { export default function hoistNonReactMethods<T, S>(wrapper: T, wrapped: S, delegateTo?: (wrapper: T) => S): T & S }

Сергей
10.07.2017
14:23:44
все таки не въеду

хочу

функцию createReducer которая принимает initialState и объект { [string]: (state, action) => state }

и чтобы экшены типизировались

что-то вроде такого: createReducer<ActionTypes>(initialState, { demo: (state, action) => ({ ...state, data: action.payload }) })

и чтобы ts знал что demo определенного типа

не могу понять как это типизировать

есть идеи?

Google
andretshurotshka?❄️кде
10.07.2017
14:34:39
никак?)

Сергей
10.07.2017
14:35:54
да чет не (

Vladimir
10.07.2017
14:36:56
Кинь пример в playground

Сергей
10.07.2017
14:37:23
Кинь пример в playground
пример того как хочу?

Vladimir
10.07.2017
14:37:28
ага

Сергей
10.07.2017
14:41:10
https://goo.gl/54mgnn

Если сделать как-то так: https://goo.gl/2TvUyD

Admin
ERROR: S client not available

Сергей
10.07.2017
14:46:02
В функции createReducer можно было бы вытащить A из Reducer то наверное было бы ок но возможно я не туда иду

Vladimir
10.07.2017
14:47:33
То есть в плейграунде работает?

Сергей
10.07.2017
14:48:00
нет

я не могу добиться вывода типов для аргументов редюсеров

Vladimir
10.07.2017
14:48:56
Второй пример просто сломан

Artur
10.07.2017
14:50:11
Думаю что mappedTypes должно помочь

Но вот с выводом хз

Сергей
10.07.2017
14:51:53
не могу применить

https://goo.gl/ALWNf3

Vladimir
10.07.2017
14:52:35
Ну так нет ошибок же

Сергей
10.07.2017
14:52:48


Google
Сергей
10.07.2017
14:53:01
Parameter 'action' implicitly has an 'any' type

Vladimir
10.07.2017
14:53:08
а, ок

Сергей
10.07.2017
14:53:33
а хочу чтобы action в foo(state, action) стал string из ActionTypes

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

Artur
10.07.2017
14:54:25
Чё то у меня не шарится

Получилось вроде сделать, но пришлось закостыльныть в createReducer

Vladimir
10.07.2017
14:55:23
Вообще тут две ошибки

Artur
10.07.2017
14:55:27
interface Action<T, P> { type: string payload: P } type Reducer<S, T, A> = (state: S, action: Action<T, A>) => S function createReducer<S,T,R = { [key: string]: Reducer<S, keyof T, T> }>(initial: S, reducers: R): (state: S, action: Action<keyof T, T>) => S { return (state, action) => { const handler = (reducers as any)[action.type] return handler ? handler(state, action) : state } } interface ActionTypes { foo: string, bar: number, } const initialState = {} createReducer<typeof initialState, ActionTypes>(initialState, { foo(state, action) { // action should be string return state }, bar(state, action) { // action should be number return state } })

Вот короч

Vladimir
10.07.2017
14:55:30
Надо сначала с первой разобраться

Vladimir
10.07.2017
14:56:47
http://www.typescriptlang.org/play/index.html#src=interface%20Action%3CT%2C%20P%3E%20%7B%0D%0A%20%20type%3A%20string%0D%0A%20%20payload%3A%20P%0D%0A%7D%0D%0A%0D%0Atype%20Reducer%3CS%2C%20T%2C%20A%3E%20%3D%20(state%3A%20S%2C%20action%3A%20Action%3CT%2C%20A%3E)%20%3D%3E%20S%0D%0A%0D%0Afunction%20createReducer%3CS%2CT%2CR%20extends%20Reducer%3CS%2C%20keyof%20T%2C%20T%3E%20%7D%3E(initial%3A%20S%2C%20reducers%3A%20R)%3A%20(state%3A%20S%2C%20action%3A%20Action%3Ckeyof%20T%2C%20T%3E)%20%3D%3E%20S%20%7B%0D%0A%20%20return%20(state%2C%20action)%20%3D%3E%20%7B%0D%0A%20%20%20%20const%20handler%20%3D%20reducers%5Baction.type%5D%0D%0A%0D%0A%20%20%20%20return%20handler%20%3F%20handler(state%2C%20action)%20%3A%20state%0D%0A%20%20%7D%0D%0A%7D%0D%0A%7B%7D%0D%0A

Artur
10.07.2017
14:56:51
у тебя action: 'foo' | 'bar'
Ну так ты дальше играйся с сигнатурой, зато он стал тип выводить

Vladimir
10.07.2017
14:56:51
Вот первая

Сергей
10.07.2017
14:58:01
я почему-то не могу заюзать keyof T как ключ

втф

Vladimir
10.07.2017
14:59:44
http://www.typescriptlang.org/play/index.html#src=interface%20Action%3CT%2C%20P%3E%20%7B%0D%0A%20%20type%3A%20string%0D%0A%20%20payload%3A%20P%0D%0A%7D%0D%0A%0D%0Atype%20Reducer%3CS%2C%20T%2C%20A%3E%20%3D%20(state%3A%20S%2C%20action%3A%20Action%3CT%2C%20A%3E)%20%3D%3E%20S%0D%0A%0D%0Afunction%20createReducer%3CS%2CT%3E(initial%3A%20S%2C%20reducers%3A%20%7B%20%5Bkey%3A%20string%5D%3A%20Reducer%3CS%2C%20keyof%20T%2C%20T%3E%20%7D)%3A%20(state%3A%20S%2C%20action%3A%20Action%3Ckeyof%20T%2C%20T%3E)%20%3D%3E%20S%20%7B%0D%0A%20%20return%20(state%2C%20action)%20%3D%3E%20%7B%0D%0A%20%20%20%20const%20handler%20%3D%20reducers%5Baction.type%5D%0D%0A%0D%0A%20%20%20%20return%20handler%20%3F%20handler(state%2C%20action)%20%3A%20state%0D%0A%20%20%7D%0D%0A%7D%0D%0A%0D%0Ainterface%20ActionTypes%20%7B%0D%0A%20%20foo%3A%20string%2C%0D%0A%20%20bar%3A%20number%2C%0D%0A%7D%0D%0A%0D%0Aconst%20initialState%20%3D%20%7B%7D%0D%0A%0D%0AcreateReducer%3Ctypeof%20initialState%2C%20ActionTypes%3E(initialState%2C%20%7B%0D%0A%20%20foo(state%2C%20action)%20%7B%0D%0A%20%20%20%20%2F%2F%20action%20should%20be%20string%0D%0A%20%20%20%20return%20state%0D%0A%20%20%7D%2C%0D%0A%20%20bar(state%2C%20action)%20%7B%0D%0A%20%20%20%20%2F%2F%20action%20should%20be%20number%0D%0A%20%20%20%20return%20state%0D%0A%20%20%7D%0D%0A%7D)

Во

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