@typescript_ru

Страница 69 из 669
Vadim
15.09.2016
12:53:10
У меня не работает: https://www.typescriptlang.org/play/index.html#src=declare%20module%20'someModule'%20%7B%0A%09interface%20FormErrors%20%7B%0A%20%20%20%20%20%20%20%20%5Bname%3A%20string%5D%3A%20(string%20%7C%20number)%5B%5D%3B%0A%20%20%20%20%7D%0A%09%0A%09class%20Form%20%20%7B%0A%20%20%20%20%20%20%20%20static%20Field%3A%20%7Bq1%3A%20string%7D%3B%0A%20%20%20%20%20%20%20%20static%20FormErrors%3A%20FormErrors%3B%0A%20%20%20%20%7D%0A%09%0A%09const%20form%3A%20Form%3B%0A%09%0A%20%20%20%20export%20%3D%20form%3B%0A%7D%0A%0Adeclare%20module%20'main'%20%7B%0A%09import%20Form%20%3D%20require('someModule')%3B%0A%09%0A%09const%20field%20%3D%20Form.Field%3B%0A%7D

Вот неработающий код: declare module 'someModule' { interface FormErrors { [name: string]: (string | number)[]; } class Form { static Field: {q1: string}; static FormErrors: FormErrors; } const form: Form; export = form; } declare module 'main' { import Form = require('someModule'); const field = Form.Field; }

Я не могу получить доступ к статическому полю класса

Aleh
15.09.2016
12:54:16
Ты что-то не то экспортируешь

Google
Vadim
15.09.2016
12:54:24
а как экспортировать класс?

Aleh
15.09.2016
12:54:35
Конечно, ты же объект экспортируешь)

Vadim
15.09.2016
12:54:44
А с классом как быть?

Aleh
15.09.2016
12:54:55
form.constructor.Field

Vadim
15.09.2016
12:55:30
Но дело в том, что сама библиотека, для которой я пишу тайпинг, экспортиует именно класс

Aleh
15.09.2016
12:56:09
Ещё раз внимательно смотри свои тайпинги

Ты где-то ошибся

Vadim
15.09.2016
12:57:06
сейчас покопаюсь

Упс да )

Такой вопрос. В тайпингах многих библиотек встречаются модули, имена которых начинаются с "~". Пример: declare module '~rxjs/observable/dom/AjaxObservable' { Что дает такое именование? Что оно означает? Можно ли где-то прочитать про такую конвенцию именований?

Кстати, это сообщество самое активное из русскоязычных по Тайпскрипту, или есть какие-то более популярные?

Google
Vadim
15.09.2016
13:50:09
)

Vadim
15.09.2016
13:51:12
Чтобы отделить экспортируемые модули от внутренних
Нет. Эти модули так же доступны извне

Alexander
15.09.2016
13:52:54
Нет. Эти модули так же доступны извне
Это понятно, я имею в виду, именованием

Aleh
15.09.2016
13:53:33
Vadim
15.09.2016
13:54:04
Может быть так

Aleh
15.09.2016
13:55:42
Чтобы отделить экспортируемые модули от внутренних
а зачем это может быть нужно? Описываешь в одном модуле и не экспортишь ненужное

Artur
15.09.2016
19:02:28
Своего рода группировки. Потом они импортятся в декларации самого модуля.

Aleh
15.09.2016
19:15:05
почему бы просто не раскидывать модули также, как они есть на самом деле

Artur
15.09.2016
19:44:34
вот, что это за приватные?
Так работает бандлер typings

Это просто группировка

Так надо короче)

Но импортить от туда не надо

Посмотри файл деклараций, там будет декларация модуля черкз которую уже экспортятся определения из этих "группировок"

Aleh
15.09.2016
19:47:40
так а че, в npm уже годные модули?

Google
Ҫѐҏӗѫӑ
16.09.2016
03:01:58
вощем с Дениелом еще все афтепати разговаривали

Sergey
16.09.2016
05:24:37
Dreamerinnoise
16.09.2016
05:28:43
Вангую, что ВСЁ ПЛОХО

Andrey
16.09.2016
05:30:02
Вангую, что ВСЁ ПЛОХО
Если б плохо, то уже бы все рассказал

Artur
16.09.2016
08:41:55
@chicoxyzzy Не томи уже

Sergey
16.09.2016
09:03:10
Афтерпати удалась

Vadim
16.09.2016
10:11:51
Люди, как можно при наследовании интерфейса сменить тип поля на другой? Просто у меня компилятор ругается

Vadim
16.09.2016
10:13:02
Это странно и непривычно )

И второй вопрос: как в наследуемом интерфейсе сделать унаследованное поле необязательным, в то время как у родительского интерфейса оно было обязательным. Бывают такие задачи, когда нужно иметь сходные структуры, но только в одной из них поля являются необязательными

Alex
16.09.2016
10:14:35
никак

так что нужно делать базовый интерфейс и от него наследовать

Roman
16.09.2016
10:15:07
Vadim
16.09.2016
10:15:07
Какой грустный день (

А как можно сделать две структуры со сходным набором имен полей, но с разными типами этих полей?

Roman
16.09.2016
10:17:01
Вы можете сделать 3 интерфейса в одном поле foo, другие два от него наследуются и имеют специфичные для них поля

я правильно понял вопрос?

Vadim
16.09.2016
10:17:24
В принципе да, логично!

Спасибо!

Просто у базового родителя сделать поля типа any

Google
Vadim
16.09.2016
10:17:44
Как я понял

Roman
16.09.2016
10:18:05
решения для второго вопроса нет, а если в TS так и можно я бы не стал делать

ой, на первый, про тип

не надо менять тип поля

можно сделать number | string если очень нужно.

это как пример

Admin
ERROR: S client not available

Roman
16.09.2016
10:21:11
А зачем Вам нужно поменять тип поля? Если конкретный пример?

Aleh
16.09.2016
10:51:25
ровно как и делать его опциональным

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

можно сделать number | string если очень нужно.
при наследовании\реализации? О.о

Roman
16.09.2016
10:54:07
Aleh
16.09.2016
10:54:12
а :)

Vadim
16.09.2016
10:54:13
Бывали такие задачи, пока осваивал тайпскрипт в течении последнего месяца. Сейчас после рефакторингов такой необходимости уже нет, и деталей я не очень помню ) Просто помню нужно было создать две связанные структуры (одна является отражением другой, то-есть с тем же набором полей), но служащие разным функциональным задачам, и потому поля эти содержат совсем разные типы танных. Сейчас бы я это сделал через создание общего предка с заданным набором полей типа any

Aleh
16.09.2016
10:54:42
а зачем вообще им предок?

если это две разные структуры?

ну похожи, так бывает

Vadim
16.09.2016
10:55:21
Хотя да, и создание общего предка тут не поможет. Просто была необходимость сделать так, что б перечень полей был строго связан

Да, видимо не очень распространенная задача, и не удивлюсь что в TS такой возможности нет )

Anton
16.09.2016
10:56:28
Так это дженерик, нет?

Google
Vadim
16.09.2016
10:56:54
Да, точно! Дженерик решил бы!

Oleksandr
16.09.2016
14:34:12
товарищи, а вы не видели бойлерплейта для тайпскрипт либ? идеально для VS2015 но и отдельно тоже пошло бы. ну то есть чтобы она была на выходе npm пакаджем с .d.ts и всем прочим, готовым для паблишинга в npm и инклюда в проекты на ноде и для браузера например с вебпаком

а то сайтов куча а либ нету

Aleh
16.09.2016
14:35:22
а что там бойлерплейтить?

Sergey
16.09.2016
14:36:05
Ну типа нечего. Но и для nodejs нет такого, хотя казалось бы

Oleksandr
16.09.2016
14:56:10
а что там бойлерплейтить?
я, пожалуй, неправильно выразился. вот есть у меня либа с тестами, и есть 2 проекта которые ее используют

и вот хочется чтобы как только тесты прошли - она попала к ним в node_modules

только таких либ не одна и не две

и проектов не два

и руками все это передеплоивать очень раздражает

потому что даже если просто у всего звать npm install - долго

особенно по сравнению с тем как быстро тайпскрипт билдается

Aleh
16.09.2016
15:00:18
м, вы хотите, чтобы при изменении какой-то вашей внутренней либы, она автоматически выкатывалась на всех ваших проектах, где используется?

Sergey
16.09.2016
15:01:23
Npm link ? )

Aleh
16.09.2016
15:02:58
чет мне кажется, что это офигенно плохая идея, а локально для разработки npm link да)

Oleksandr
16.09.2016
15:03:04
хммм npm link выглядит интересным

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