
Vladislav
09.04.2018
07:23:11

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
из примера не понятно как тип используется
и где подключается

Andrey
09.04.2018
09:32:43

Vladislav
09.04.2018
09:33:09
а вижу

Evgeniy
09.04.2018
09:40:52
Разобрасля, немного не тот тип передавал в компонентах
/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

Andrey
10.04.2018
09:17:56

Alexander
10.04.2018
09:19:46
Первый путь безопаснее?
Интересно как компилятор поймет, что после фильтрации только цифры остались в массиве.

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

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

Andrey
10.04.2018
09:26:34

n06rn
10.04.2018
09:30:21

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

Eugeniy
10.04.2018
10:33:13
Окей, валидно)

Google

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

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

Dmitry
10.04.2018
10:34:59

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

anatolii
10.04.2018
21:49:53

Andrey
10.04.2018
22:03:41

Дмитрий
10.04.2018
23:12:27

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;