@typescript_ru

Страница 239 из 669
Дмитрий
21.05.2017
20:51:15
Ну насчёт нет нужды это вряд ли. Можно обойтись — да

Александр
21.05.2017
21:07:52
Там выше речь была о том чтобы дать возможность динамически назначать типы

собственно, зачем тогда статическая типизация?

в целом, да, я хотел сказать именно "можно обойтись", потому как интерфейсами из внешних библиотек пользуемся повсеместно

Google
Friedrich
22.05.2017
05:31:48
Александр
22.05.2017
05:59:20
Ну динамически получать тип и потом его использовать, это не совсем путь статической типизации. (тем более получать из кода который пишешь не ты сам)

andretshurotshka?❄️кде
22.05.2017
06:01:14
Почему динамически-то тип функции же известен

и записан статически

Александр
22.05.2017
06:21:59
ну раз его нельзя использовать, значит он не экпортируется из той внешней библиотеки как можно завязывать свой код на что-то приватное внутри другой библиотеки?

Friedrich
22.05.2017
06:29:05
Я не уверен, что правильно называть это "приватным".

Этот тип используется в публичной функции. Методы этого типа мне известны снаружи и статически резолвятся. Если из этого типа что-то будут убирать, или в нём что-то будут менять — это будет ломающим изменением точно так же, как в любом публичном типе.

Единственная проблема: я не могу назвать имя этого типа, он анонимный.

Твоя идея с введением собственного интерфейса мне нравится значительно больше, чем имеющееся решение (которое я там сейчас в коде скотчем примотал). Но этот интерфейс будет копипастой из кода библиотеки. Копипаста — нехорошо.

Александр
22.05.2017
06:41:53
Это не совсем копипаста, это интерфейс данных для кода который мы пишем, там всё и не нужно. Может быть внешнюю библиотеку потом придётся сменить и под этот интерфейс можно написать адаптер и присоединить что угодно.

Max
22.05.2017
07:37:10
парни

так что нашли нормального из tslint?

Google
Friedrich
22.05.2017
07:51:08
Это не совсем копипаста, это интерфейс данных для кода который мы пишем, там всё и не нужно. Может быть внешнюю библиотеку потом придётся сменить и под этот интерфейс можно написать адаптер и присоединить что угодно.
Не согласен с первым утверждением. Представим, что у библиотеки есть два метода: producer: () => ITerminal consumer: (ITerminal) => string Если я хочу получить объект из producer, сохранить его в локальной переменной, а потом передать в consumer — значит, мне нужен точный тип этого объекта, или полная копипаста интерфейса из кода библиотеки (спасибо структурной типизации, что это вообще работает). И я считаю, что копипастить в данном случае... странно. Я не хочу в данном случае менять внешнюю библиотеку или писать абстрактный адаптер (это нормальная задача, но она не имеет отношения к коду в данном случае). А то эдак получается, что нам вообще тайпинги от библиотек не нужны.

Александр
22.05.2017
08:07:38
конкретно про ITerminal, я посмотрел там уже экспортиться этот интерфейс и проблема как бы решена, даже если бы автор действительно забил на это на всё всегда есть возможность форкнуть репу и использовать этот модуль по форку (где уже можно наэкспортить что угодно) то есть это не проблема Typescript в целом, это сложности opensource

Олег
22.05.2017
08:16:06
на самом деле не экспортируется в main

Friedrich
22.05.2017
08:19:05
Я поправил только чтоб index.d.ts экспортировался. Но из него не экспортируется интересующий нас тип :(

Это потому, что я не знаю, как правильно сделать. Кто-нибудь посоветует?

Олег
22.05.2017
08:24:10
Скопировать нужный интерфейс в свой проект с другим названием?

Если у них изменится интерфейс и не сможет скаститься в твой то тебе должна вылететь ошибка при присвоение

Friedrich
22.05.2017
08:48:28
Я считаю, что нужно просто тайпинг сделать нормальный, чтоб он экспортировал тип ITerminal.

Олег
22.05.2017
08:50:11
Да, должен. Но если его нет...

Friedrich
22.05.2017
08:53:11
Тогда отправляешь пул-реквест и он появляется :)

Олег
22.05.2017
08:55:26
и делаешь то что надо делать, пока они обрабатывают твой PR

Friedrich
22.05.2017
09:13:46
Это-то понятно. Я локальное решение уже бахнул. Мне хочется по-нормальному теперь решить проблему :)

Max
22.05.2017
10:55:46
class DocumentList extends React.Component<Props, State> { render(): React.ReactElement<any> { return ( <DocumentListContainer/> ); } }

парни, а что тут вместо any писать?

пропсы DocumentList?

Сергей
22.05.2017
10:56:38
Max
22.05.2017
10:57:00
ну тогда tsline typedef кидает )

Aleh
22.05.2017
10:57:24
чет я тож не понимаю, зачем писать у render тип результата

тип результата в interface/type пишу и вроде больше нигде)

Google
Max
22.05.2017
10:57:58
нууу ок

typedef вырублю

Дмитрий
22.05.2017
11:33:39
Моя практика показала, что нужно типы как аргументов, так и результата, указывать по минимуму вообще

Max
22.05.2017
11:33:56
?

andretshurotshka?❄️кде
22.05.2017
11:34:47
по минимуму это на жс писать?)

Aleh
22.05.2017
11:44:23
ну аргументов ts не позволяет не указывать)

Max
22.05.2017
11:45:21
export type Rule = any;

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

что можно вместо any написать чтобы оно хотя бы по названию типа проверяла?

Aleh
22.05.2017
11:47:06
не совсем понятно, что хочешь, чтобы проверялось

Max
22.05.2017
11:47:38
ну хотя бы чтобы на выходе был тип Rule

Дмитрий
22.05.2017
11:48:46
Моя практика показала, что нужно типы как аргументов, так и результата, указывать по минимуму вообще
Ругается на ошибки что ли?)) Для того, чтобы опускать типы аргументов и результата, нужно быть уверенным, что без этого код всё равно затипизируется правильно

Max
22.05.2017
11:49:13
хотя

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

понятно

тут тоже не осилили

https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/mongodb/index.d.ts#L433

Дмитрий
22.05.2017
11:58:28
Ругается на ошибки что ли?)) Для того, чтобы опускать типы аргументов и результата, нужно быть уверенным, что без этого код всё равно затипизируется правильно
Нет. Просто хватает включения strict и указания типов только там, где тс этого требует + в тех местах, где есть шанс, что автоматическое выведение типов не сработает

Дмитрий
22.05.2017
11:58:50
То есть почти везде

Дмитрий
22.05.2017
11:59:06
Я же не говорю "вообще не указывать типы". Я говорю "указывать в минимально необходимом количестве"

Google
Дмитрий
22.05.2017
11:59:33
Ну вот функции рендера точно не нужно указывать, например)

Или, в том же реакте, указать функциональному компоненту тип StatelessComponent и уже не нужно напрямую указывать, что он принимает и что возвращает

Artur
22.05.2017
12:04:51
Дмитрий
22.05.2017
12:05:42
Aleh
22.05.2017
12:05:55
из return же

Дмитрий
22.05.2017
12:06:04
Что там, где выводятся типы, их указывать не надо

Admin
ERROR: S client not available

andretshurotshka?❄️кде
22.05.2017
12:07:51
Max
22.05.2017
12:08:34
да это структура данных

генерик зачем? )

andretshurotshka?❄️кде
22.05.2017
12:09:19
ну чтобы на выходе тот же тип был

<T>(v: T) => T

Хотя не очень понял что надо)

Nikita
23.05.2017
13:06:38
кто подскажет как быстро определить модуль, как any?

Aleh
23.05.2017
13:08:02
declare module "asd";

Nikita
23.05.2017
13:08:04
const moduleName: any
[ts] Could not find a declaration file for module 'peer'. 'c:/projects/meetover/node_modules/peer/lib/index.js' implicitly has an 'any' type.

Сергей
23.05.2017
13:08:24
посмотри в DefinitelyTyped

любое определение

Nikita
23.05.2017
13:08:40
declare module "asd";
где это нужно прописать? отдельный файлик?

Google
Сергей
23.05.2017
13:08:43
declare module 'moduleName' { }

но any нельзя вызвать

Aleh
23.05.2017
13:08:57
d.ts

Nikita
23.05.2017
13:09:00
посмотри в DefinitelyTyped
для этого модуля устаревшие зависимости

Сергей
23.05.2017
13:09:08
Nikita
23.05.2017
13:09:48
ошибок там под миллион, версия сильно расходится с текущей

Олег
23.05.2017
13:10:38
declare module 'moduleName' { }
экспорт добавить

Nikita
23.05.2017
13:18:46
в любом файле деклараций
а где его нужно разместить и как лучше назвать?

Aleh
23.05.2017
13:19:10
как угодно, у меня src/declarations.d.ts для такого лежит

там буквально 100 строк такой всякой ерунды

Сергей
23.05.2017
13:20:02
Aleh
23.05.2017
13:20:38
разницы нет

Сергей
23.05.2017
13:21:01
Да, но вроде как порядка больше;

Aleh
23.05.2017
13:21:20
хз, какой там порядок нужен в 100 строках)

Олег
23.05.2017
13:22:26
можно и по разным, только в отдельном файле референсы прописать

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