@typescript_ru

Страница 10 из 669
Ivan
18.06.2016
12:27:04
собсна что хотим от рекомпоза - имея типы

Чтобы тип Comp3 определялся - в таком раскладе он определяет тип

но приходится явно описывать типы всех HOC

(props: { input: string }) - это как бы задалбывает

Google
Ivan
18.06.2016
12:29:07
или самому заранее прописывать тип компоненты на входе чтобы получить атоматическое разруливание типов внутри хоков?

Я так понимаю и то и то сразу не выйдет

Roman
18.06.2016
12:31:06
я не понимаю зачем мне PropTypes
Перечисли просто чтобы знать какие пропсы нужны компоненту, для типизации они бесполезны

Ivan
18.06.2016
12:33:07
правда я даже доков по ts не читал поэтому могу ошибаца ?

Vasiliy
18.06.2016
12:34:51
мне надо переварить это, спасибо)

andretshurotshka?❄️кде
18.06.2016
13:07:02
interface IUpdate { update_id: number; } interface UpdateMessage extends IUpdate { message: any; } interface UpdateInlineQuery extends IUpdate { inline_query: any; } interface UpdateCallbackQuery extends IUpdate { callback_query: any; } type Update = UpdateMessage | UpdateInlineQuery | UpdateCallbackQuery; function isMessage (x: Update): x is UpdateMessage { return !!(<UpdateMessage> x).message; } function isInlineQuery (x: Update): x is UpdateInlineQuery { return !!(<UpdateInlineQuery> x).inline_query; } function isCallbackQuery (x: Update): x is UpdateInlineQuery { return !!(<UpdateCallbackQuery> x).callback_query; } function checkType(u: Update) { switch (true) { case isMessage(u): console.log('message', u); break; case isInlineQuery(u): console.log('inline query', u); break; case isCallbackQuery(u): console.log('callback query', u) break; default: console.log('unknown type', u) } } checkType({ update_id: 323421, message: {}, inline_query: undefined, callback_query: undefined }) checkType({ update_id: 323421, message: undefined, inline_query: {}, callback_query: undefined }) checkType({ update_id: 323421, message: undefined, inline_query: undefined, callback_query: {} }) можно такое по-другому написать?

Vasiliy
18.06.2016
13:18:56
вот так работает: import { StatelessComponent } from 'react'; export default <StatelessComponent<ICounterProps>>composed; или тоже самое, только короче: import { SFC } from 'react'; export default <SFC<ICounterProps>>composed; мне пока проще всего на этом остановиться тк надо херачить по-резкому дальше (: но я вернусь к этому 100% чуть позже на неделе

? Snyp
18.06.2016
13:32:58
Посоветуйте тех. вуз на заочку, в спб с it тематикой.

Vasiliy
18.06.2016
13:45:48
у меня ts-loader + webpack и я хочу вынести пару интерфейсов отдельный файл чтобы их пошарить, я правильно ведь понял что это надо делать в .d.ts? как вы делаете если надо совместно использовать интерфейсы в 2-х разных файлах?

хм, просто создал файлик types.d.ts, закинул туда нужные интерфейсы и рефернс не писал даже в рядом лежащих .ts-файлах, а интерфейсы видны и все ок, не понял как это работает и не уверен, что все правильно делаю, но работает

Google
Aleh
18.06.2016
14:24:31
Только нельзя писать export default interface, приходится в две строки или без default :)

Ҫѐҏӗѫӑ
18.06.2016
14:31:17
вообще с импортами и экспортами дефинишнов нк все хорошо, стоит признать

Aleh
18.06.2016
14:40:31
Так я не про дефинишины

запили ишью
Да, нужно бы

Sergey
18.06.2016
14:48:39
вообще с импортами и экспортами дефинишнов нк все хорошо, стоит признать
У тебя есть ссылка на must have бутстрап или best practice по recompose?

Vasiliy
18.06.2016
14:52:40
там вроде нет особо доков, есть тесты и API.md, но она простая, вот еще примеры какие-то нашел старые https://github.com/stoeffel/recompose-examples

Viacheslav
18.06.2016
17:50:23
(props: { input: string }) - это как бы задалбывает
я написал замену compose которая почти всегда сама выводит типы

если интересно, могу показать когда буду дома

Ivan
18.06.2016
17:51:00
очень

Viacheslav
18.06.2016
17:51:41
если забуду, пингвин через час

пингани*

Ҫѐҏӗѫӑ
18.06.2016
17:51:59
Пингвин

Ivan
18.06.2016
17:52:03
ок спасибо пингвану

но теперь зная что это возможно лучше пока не показывай - денек подумаю

Viacheslav
18.06.2016
17:56:45
почти всегда, не удалось разобраться до конца

Ҫѐҏӗѫӑ
18.06.2016
18:10:08
?

Alexander
18.06.2016
18:35:49
?
+

Vasiliy
18.06.2016
18:37:24
не понимаю какой смысл ставить бабель после ts-loader, если все равно ts не соберет то, что не сможет

например, вещи из stage-0

Google
Vasiliy
18.06.2016
18:37:52
({ foo, bar, …rest }) =>, Object.values, etc, как без этого жить? Object.assign писать везде?

Alexander
18.06.2016
18:37:55
Прокси не соберет)))

Vasiliy
18.06.2016
18:40:55
очень не удобно без object spread, например

я привык в компонентах писать ({ foo, bar, qux, …rest }) => (my jsx), а сейчас такое до бабеля даже не дойдет

наверное, было бы круто, если бы можно было просто сказать типа “тут я знаю, что не корректный синтаксис, пропусти”, тогда дошло бы до бабеля и он бы транспильнул. как eslint-disable(-line), например. хотя не уверен, что это хорошая идея

Aleh
18.06.2016
19:57:59
ну, это не так просто. Парсеру придется угадывать тогда, какой кусок невалиден и надо игнорить, а какой валиден

если писать в комментах какие-то штуки, вроде /** @ts-parser skip **/, то сам смысл ts теряется

да и проще этот сахарок тогда развернуть)

тут мне кажется, было бы круто, если бы сам ts можно было также или в меньшей степени расширять плагинами аля babel

а если еще api к парсеру запилить такой же, отделив от части type-detect, вообще хорошо бы вышло

стоп, это же flow

Viacheslav
18.06.2016
20:25:59
я ставлю babel после ts для react оптимизаций

надо, кстати, проверить насколько они помогают

Dmitry
18.06.2016
20:32:23
То есть ты не проверял и просто так их зафигачил? :3

Viacheslav
18.06.2016
20:33:31
изначально я включил бабель для hmre

потом объявили о rhl3.0

Google
Viacheslav
18.06.2016
20:33:58
hmre я выпилил, а плагины оптимизации осталить

и да, я так и не сравнивал

Vasiliy
18.06.2016
23:47:39
но я так и не понимаю как жить без object spread, ведь нет ...rest, а мне очень часто бывает нужно все не известные свойста передать вложенному элементу, т.е. без всяких omit и т.д (не уверен, что понятно то, что я написал). как вы это сейчас делаете?

Andrey
19.06.2016
07:19:06
надо, кстати, проверить насколько они помогают
Должны около 10-15% процентов давать прироста производительсноти

потом объявили о rhl3.0
И как работает? стабильно уже?

Ivan
19.06.2016
09:18:07
@vslinko по поводу композа - давай посмотрим твою версию. потому что никакая моя версия не пашет в паре с Object.assign а это самый распространненный вариант return в recompose, вот пример словами BAD помечено где плохо // Simple flow interface HOC<TIn, TOut> { (p: TIn): TOut; } function flow<TIn, TOut, T0>(p0:HOC<TIn, T0>, p1:HOC<T0, TOut>): HOC<TIn, TOut> { return (v: TIn) => { const r: TOut = p1(p0(v)); return r; } } // This works as expected const a = flow( // 'a' has type (e: number) => ({ // type of 'e' should be set a: 10 }), (p) => ({ // 'p' has type b: 10, prev: p }) ); ЗЫ: разрулил трабла была в Object.assign({}) // ---- BUT THIS WILL NOT WORK const b = flow( // BAD: 'b' has type HOC<number, any> (e: number) => Object.assign({ // 'e' type should be set a: 10 }), (p) => Object.assign( // BAD: 'p' has type `any { b: 10 }, p ) );

FUCK

разрулил Object.assign({x:1}) возвращает any

если поменять на Object.assign({}, {x: 1}) работает

Vasiliy
19.06.2016
11:19:30
@vyorkin @mkusher tsuquyomi виснет в > 50% случаев на TsuGeterr у меня. Связка deoplete + neomake + tsc пока работает не очень
мда, так и есть, на TsuGeterr виснет часто, очень бесит( приходится пока часто выключать, вообще себе хоткей сделал на active/passive mode (кстати, :TsuStatusServer возвращает все время “reading")

Aleh
19.06.2016
11:20:09
этот же самый tsserver же юзается во всяких vscode, atom, sublime. Там все тоже так?

я пока возвращаюсь на tsc+neomake, оно так не лагает

Vasiliy
19.06.2016
11:20:57
да, интересно узнать насколько хорошо это на других редакторах работает ^

Viacheslav
19.06.2016
11:48:43
я юзаю вот такую версию https://gist.github.com/vslinko/8adfcb8ccfb7f68b081ce400956f58d2

@cybice ^

Ivan
19.06.2016
11:50:43
Спасибо Слав!

Google
Viacheslav
19.06.2016
11:59:01
как виндно, некоторые вещи все равно приходится объявлять, но не все

Vasiliy
19.06.2016
15:52:39
ребят, а может кто-нибудь на примере показать как расширять типы?

конкретный пример: require.context

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

1) ставлю тайпинги typings install dt~require —save —global

2) у меня есть файл vendors.d.ts, в нем хочу добавить ф-цию context

context: (path: string, deep?: boolean, filter?: RegExp) => RequireContext;

как это сделать?

т.е. все чего я хочу на самом деле это require.context

но ERROR in ./src/app/components/ui/my-awesome-component-that-calls-require-dot-context/index.ts (7,23): error TS2339: Property 'context' does not exist on type 'Require'.

такие вот штуки это пока что самая большая моя боль, они сильно меня тормозят

хотя вот что-то нашел

https://github.com/DefinitelyTyped/DefinitelyTyped/issues/6170

не, не понимаю( поставил тайпинги для webpack, webpack-env и require, но так не работает, они конфликтуют как-то, а убрать require typings я не могу, тк тогда другая ошибка будет: ERROR in /Users/vyorkin/projects/work/my-awesome-project-here/typings/globals/require/index.d.ts (367,13): error TS2403: Subsequent variable declarations must have the same type. Variable 'require' must be of type 'RequireFunction', but here has type 'Require'. ERROR in ./src/app/index.tsx (23,52): error TS2339: Property 'default' does not exist on type '{}'.

ок, надо было просто выкинуть все, кроме webpack-env, ну вот – минус полчаса (:

Gordey
19.06.2016
16:37:59
пиши исчо ??

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