

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' {
Что дает такое именование? Что оно означает? Можно ли где-то прочитать про такую конвенцию именований?
Кстати, это сообщество самое активное из русскоязычных по Тайпскрипту, или есть какие-то более популярные?

Aleh
15.09.2016
13:48:13
но я не уверен

Google

Aleh
15.09.2016
13:49:53

Vadim
15.09.2016
13:50:09
)

Alexander
15.09.2016
13:50:35
Мне казалось так

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

Alexander
15.09.2016
14:01:50

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

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

Artur
15.09.2016
19:44:34
Это просто группировка
Так надо короче)
Но импортить от туда не надо
Посмотри файл деклараций, там будет декларация модуля черкз которую уже экспортятся определения из этих "группировок"

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
Люди, как можно при наследовании интерфейса сменить тип поля на другой? Просто у меня компилятор ругается

Alex
16.09.2016
10:12:50

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
ровно как и делать его опциональным
это другой отдельный интерфейс, который не подходил бы под родительский, а значит не может быть отнаследован

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 ? )

Oleksandr
16.09.2016
15:02:26

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

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