
Сергей
10.07.2017
11:06:56
Expected 2 type arguments, but got 1
втф

Max
10.07.2017
11:08:54

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

Google

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

Сергей
10.07.2017
11:09:21

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
это пиздец

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
А где-то между прочим есть люди, которые пишут код в натуральном вижл студио, собирают с его помощью, и вообще ни про какие обновления ничего не знают)

Сергей
10.07.2017
11:15:54

Andrey
10.07.2017
11:17:49

Сергей
10.07.2017
11:18:01
ща подумать надо

Max
10.07.2017
11:25:11
type PK = number | string

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
Так это ваще не ко мне вопрос, я просто комментирую то, что на скриншотах, и почему тут корректнее написать так, как я написал. Кароч пофиг)

Max
10.07.2017
11:29:52

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

Aleh
10.07.2017
11:30:34

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

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
Надо сначала с первой разобраться

Сергей
10.07.2017
14:55:49
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
}
})
у тебя action: 'foo' | 'bar'


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

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)
Во