@typescript_ru

Страница 573 из 669
Yan
09.04.2018
07:24:29
Спасибо, то что надо

Evgeniy
09.04.2018
09:29:03
ребят, привет. Чет протупляю с типами в ТС Есть объявление типа (часть интерфейса) interface SwitchItemsLayout { section: string; switchText: string; switchComponent: React.ReactNode; } interface SideBarProps { * switchItems: { [key: string]: SwitchItemsLayout }; * вот где собсна выдыет const switchItems = { 'login': { section: 'login', switchText: 'Log In', switchComponent: <p>???</p> }, 'register': { section: 'register', switchText: 'Sign Up', switchComponent: <RegistrationWizard /> }, }; получаю на выходе error TS2322: Type '{}' is not assignable to type 'IntrinsicAttributes & void & { children?: ReactNode; }'. Type '{}' is not assignable to type 'void'. ЧЯДНТ?

Google
Vladislav
09.04.2018
09:32:38
из примера не понятно как тип используется

и где подключается

Evgeniy
09.04.2018
09:40:52
скинь гист
насколько развернуто? там NDA

Разобрасля, немного не тот тип передавал в компонентах

/report

Serge
09.04.2018
11:06:26
Ребят, кто работал с криптой на уровне апи? Напишите в личку

Dmitrii
09.04.2018
18:36:39
Всем привет. Выношу из проекта общие компоненты в отдельный пакет, чтобы можно было использовать на нескольких проектах (в том числе и не TS). И возникла такая проблема - некоторые компоненты используют другие компоненты и я использую baseUrl: "./src", чтобы писать import AnotherComponent from 'components'; вместо import AnotherComponent from '../AnotherComponent'; Поставил target=es6, т.к. все потребители будут использовать rollup/webpack и babel опущу кучу ворнингов и всяких непоняток с настройками, получилось с помощью npx tsc сгенерировать файлы, но там всё ещё import AnotherComponent from 'components'; то есть потребитель пакета скорее всего не сможет такой путь разрезолвить и собрать, так ведь? Есть ли обходные пути, или придется писать относительные импорты? Может быть есть какие-то подробные мануалы, как публиковать библиотеки?

посмотрел на antd - они использую относительные пути

Vladimir
10.04.2018
03:46:41


как правильно тайп аннотации при деструктировании объекта прописывать?

Google
Vladimir
10.04.2018
03:47:08
если уже описан интерфейс

ps. там не authorID, а author в интерфейсе

хм, получилось вроде { time, text, author }: ChatMessageProps.. до этого не работало :\

n06rn
10.04.2018
09:04:52
Ребят, посоветуйте как правильно писать filter массива: https://www.typescriptlang.org/play/index.html#src=const%20ar%20%3D%20%5B1%2C%202%2C%20null%2C%204%5D%3B%0D%0A%0D%0Aconst%20far%20%3D%20ar.filter(%0D%0A%20%20%20%20el%20%3D%3E%20typeof%20el%20%3D%3D%3D%20'number'%0D%0A)

меня просто убивает что отфильтрованные массив имеет тот же тип что и изначальный

хотя null, например отфильтрован

Alexander
10.04.2018
09:08:23
Может так? https://www.typescriptlang.org/play/index.html#src=const%20ar%3A%20Array%3Cnumber%20%7C%20null%3E%20%3D%20%5B1%2C%202%2C%20null%2C%204%5D%3B%0D%0A%0D%0Aconst%20far%3AArray%3Cnumber%3E%20%3D%20ar.filter(%0D%0A%20%20%20%20el%20%3D%3E%20typeof%20el%20%3D%3D%3D%20'number'%0D%0A)

Nikolay
10.04.2018
09:11:52
https://www.typescriptlang.org/play/index.html#src=const%20ar%20%3D%20%5B1%2C%202%2C%20null%2C%20'4'%5D%3B%0D%0A%0D%0Aconst%20far%20%3D%20ar.filter(%0D%0A%20%20%20%20el%20%3D%3E%20typeof%20el%20%3D%3D%3D%20'number'%0D%0A)%20as%20number%5B%5D%3B

Alexander
10.04.2018
09:16:26
https://www.typescriptlang.org/play/index.html#src=const%20ar%20%3D%20%5B1%2C%202%2C%20null%2C%20'4'%5D%3B%0D%0A%0D%0Aconst%20far%20%3D%20ar.filter(%0D%0A%20%20%20%20el%20%3D%3E%20typeof%20el%20%3D%3D%3D%20'number'%0D%0A)%20as%20number%5B%5D%3B
Есть какая-то разница между const far: Array<number> = ... и const far = [].filter( ... ) as number[]? (я не набрасываю, правда не знаю)

Andrey
10.04.2018
09:17:56
Есть какая-то разница между const far: Array<number> = ... и const far = [].filter( ... ) as number[]? (я не набрасываю, правда не знаю)
в первом случае мы объявляем типы, и он сравнит их при присвоении во втором мы форсим компилятор думать, что это именно такой тип

Alexander
10.04.2018
09:19:46
Первый путь безопаснее?

Интересно как компилятор поймет, что после фильтрации только цифры остались в массиве.

Andrey
10.04.2018
09:25:53
Первый путь безопаснее?
ну, они скорее про другое as для объявлений не юзается, он для вывода+пара-тройка кейсов нужен(но в целом да, первый путь безопаснее) И да, компилятор никак не поймет, ибо это рантайм уже

Alexander
10.04.2018
09:26:27
Понятно, спасибо за объяснение)

Eugeniy
10.04.2018
10:24:14
Приветик, есть такой код: class A { foo(a: string, b: number): boolean { return false } } class B extends A { foo(a) { return true } } Можно ли как-то описать сигнатуру в d.ts или ещё как-либо чтобы в классе B в методе foo выводились типы аргументов

или придется каждый раз писать в наследнике foo(a: string, b: number)?

anatolii
10.04.2018
10:25:10
а ты ж указал аргумент а как any

там нечему выводиться

Google
Eugeniy
10.04.2018
10:25:34
да, но тип не должен от родителя приехать?

anatolii
10.04.2018
10:26:14
нет

Eugeniy
10.04.2018
10:26:25
хуёво, ну ок

anatolii
10.04.2018
10:26:29
то что имена совпадают вообще не значит что это параметр родителя

это не хуево это правильно

Eugeniy
10.04.2018
10:26:44
да это понятно, я не про имена, а про тип

anatolii
10.04.2018
10:27:01
ты переопределил метод

все, он новый

совершенно другой

хочешь старый, не переопределяй

Eugeniy
10.04.2018
10:27:31
ну… если я верну не верный тип или укажу первым аргументом number - то он ругнется

anatolii
10.04.2018
10:29:14
если оставишь все как есть не ругнется

а ретурн да

Есть такое понятие как интерфейс класса

это значит что у него есть определенные методы который возвращают определенные значения

в большинстве языков аргументы методов не учитываяются, вот в тс похоже тоже не учитываются

в общем пиши всегда типы руками, не придется потом вспоминать ничего

Dmitry
10.04.2018
10:33:10
в большинстве языков аргументы методов не учитываяются, вот в тс похоже тоже не учитываются
ну не, во многих строготипизированных языках можно написать несколько имплементаций метода с разными аргументами и будет вызываться соответствующий

Google
Eugeniy
10.04.2018
10:33:29
Спасибо

anatolii
10.04.2018
10:33:53
в том же цпп, где есть разные имплементации это банальное расширение интерфейса, они работают как "разные" методы

anatolii
10.04.2018
10:35:47
да, все правильно, но если описывать в интерфейсе это, оно будет описываться как разные методы

Игорь
10.04.2018
20:37:03
А вы всегда пишите на ТС в ООП стиле ? Или миксуете ? Например..какой то модуль просто экспортируемые функции и т.д.

anatolii
10.04.2018
20:43:21
Я всегда пишу в говнокод-стиле

Оч удобно

Как в жс

Игорь
10.04.2018
20:48:59
По ходу это я сильно упариваюсь

anatolii
10.04.2018
20:50:48
Ну иногда и я упарываюсь, но когда нужна экстра строгость, в большинстве случаев я пишу как в ноде + типы. Но я не скажу что это подходящий вариант, у меня опыта мало

Aleh
10.04.2018
21:13:14
А вы всегда пишите на ТС в ООП стиле ? Или миксуете ? Например..какой то модуль просто экспортируемые функции и т.д.
Если под "ооп стилем" подразумевается "похоже на джаву", то сомнительное решение, потому что очень многое гораздо удобнее сделать просто функциями

anatolii
10.04.2018
21:14:28
Тут мне кажется дело не в функциях а в жс данных, обьекты собственно

Это популярно, стандартный тип данных

Aleh
10.04.2018
21:15:20
В жаве форсятся классы, в жс есть куча других удобных вариантов создавать объекты

anatolii
10.04.2018
21:17:38
Да, особенно если их не создавать а собирать. Я бы привел аналогию а моделями, но некоторые в них вкладывают оверлогику

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

Max
10.04.2018
21:41:19
А вы всегда пишите на ТС в ООП стиле ? Или миксуете ? Например..какой то модуль просто экспортируемые функции и т.д.
А иначе не получается, писать на функциональном стиле не получится потому что тс не поддерживает самой базовой для фп вещи - композицию функций (не умеет пробрасывать типы через дженерик функции ) https://www.typescriptlang.org/play/#src=function%20promisify%3CInput%2C%20Output%3E(fn%3A%20(a%3A%20Input)%3D%3EOutput)%3A%20(a%3A%20Input)%20%3D%3E%20Promise%3COutput%3E%20%7B%0A%20%20return%20a%20%3D%3E%20Promise.resolve(fn(a))%0A%7D%0A%0Afunction%20track%3CInput%3E(e%3A%20Input)%3A%20Input%20%7B%0A%20%20console.log(e)%3B%0A%20%20return%20e%3B%0A%7D%0Aclass%20Foo%20%7B%20bar()%7B%7D%20%7D%0Aconst%20promisifiedTrack%20%3D%20promisify(track)%3B%0ApromisifiedTrack(new%20Foo()).then(x%3D%3Ex.bar())%3B

Andrey
10.04.2018
22:03:41
как правильно тайп аннотации при деструктировании объекта прописывать?
Ест не ошибаюс то както так const { huy: string; djigurda: number; } = this.props;

Дмитрий
10.04.2018
23:12:27
Ест не ошибаюс то както так const { huy: string; djigurda: number; } = this.props;
Это переименование жсное, а не аннотации

Google
Valery
10.04.2018
23:13:02
как правильно тайп аннотации при деструктировании объекта прописывать?
насколько я вижу, тебе необходимо типизировать аргументы функции, это делается так: type TQwe = { bar: number; buzz: string; } // вариант 1 type TFunc = (list: TQwe[]) => number; const func: TFunc = list => list.length; // вариант 2 const func2 = (list: TQwe[]): number => list.length

Andrey
10.04.2018
23:13:15
Это переименование жсное, а не аннотации
С точкозапятыми на конце строк это превращается в тайпинги

Дмитрий
10.04.2018
23:13:46
Valery
10.04.2018
23:13:57
если же хочешь что бы при деструктуризации у тебя подсасывались нужные типы к переменным, то тогда необходимо указать тип родительского объекта, а TS сам остальное выведет: type TQwe = { bar: number; buzz: string; foo: boolean; } declare const dataSource: TQwe; const { bar, buzz, foo } = dataSource;

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