@typescript_ru

Страница 234 из 669
Mike
17.05.2017
13:50:51
блин

да

Сергей
17.05.2017
13:51:09
Aleh
17.05.2017
13:51:10
а зачем вообще тогда что-то передавать :D

Google
Friedrich
17.05.2017
13:51:20
Код правильный, но я, честно говоря, нить разговора потерял, и не понял, что он должен был нам доказать.

Adam
17.05.2017
13:51:27
не знаю )

Aleh
17.05.2017
13:51:52
Narek
17.05.2017
13:51:58
class A { static test(): void { } static test2(): void { } } function f(a: A) { A.test() A.test2() } f(new A())
а это вообще не вариант, я же сказал, что нужно передавать не инстанс а класс

Adam
17.05.2017
13:51:59
статики наследуются

Narek
17.05.2017
13:52:04
работает ж
поменяй конструктор у наследника

Mike
17.05.2017
13:52:08
выглядит страшно))))
это абстрактная демонстрация того как написать абстрактную фабрику, с произвольным количеством аргументов в конструкторе

Adam
17.05.2017
13:52:17
мало ли что ты сказал, ты неправильно возможности языка используешь

Aleh
17.05.2017
13:53:16
поменяй конструктор у наследника
ну правильно, эти объекты уже несовместимы

а чего вы ожидали?

Narek
17.05.2017
13:53:41
я ничего не ожидал, я знаю, что с typeof не работает

Mike
17.05.2017
13:54:10
я ничего не ожидал, я знаю, что с typeof не работает
можешь ещё раз нормально в 1 пост сформулировать свой вопрос, что тебе нужно, что пробовал, и что не работает

Google
Aleh
17.05.2017
13:54:14
я не понимаю, какая у вас задача. Нельзя описать тип без дублирования для разных несовместимых по интерфейсу объектов

Adam
17.05.2017
13:54:48
классы не нужно передавать, это говорит о том, что ты не понимаешь, что делаешь. Если ты передаёшь их в декоратор - это одно дело. Тогда ты действительно модифицируешь класс

Aleh
17.05.2017
13:55:14
точно-точно не нужно?

Narek
17.05.2017
13:55:15
можешь ещё раз нормально в 1 пост сформулировать свой вопрос, что тебе нужно, что пробовал, и что не работает
Задача - написисать функцию, которая принимает класс и его наследников, не инстанс, а именно класс

Aleh
17.05.2017
13:55:47
Задача - написисать функцию, которая принимает класс и его наследников, не инстанс, а именно класс
typeof это делает, но все объекты должны быть совместимы, в том числе и new на них должен делаться одинаково

Adam
17.05.2017
13:55:47
ещё раз говорю, ты заблуждаешься

Mike
17.05.2017
13:56:44
ещё раз говорю, ты заблуждаешься
ты же понимаешь что статики не наследуются, и два класса который один наследник другого не совместимы по статическому интерфейсу?

а инстансы их уже совместимы

Adam
17.05.2017
13:57:54
в ts статики наследуются, или я ошибаюсь?

Aleh
17.05.2017
13:58:03
наследуются да

Mike
17.05.2017
13:58:36
офигеть

не знал

https://www.typescriptlang.org/play/index.html#src=class%20A%20%7B%0A%20%20%20%20static%20test()%3A%20void%20%7Bconsole.log('qq')%20%7D%0A%20%20%20%20static%20test2()%3A%20void%20%7B%20%7D%0A%7D%0A%0Aclass%20B%20extends%20A%20%7B%0A%7D%0A%0Afunction%20f(a%3A%20typeof%20A)%20%7B%0A%20%20%20%20a.test()%0A%20%20%20%20a.test2()%0A%20%20%20%20let%20ainst%20%3D%20new%20a()%3B%0A%7D%0A%0Af(B)

Adam
17.05.2017
13:58:47
честно, мне больно от того, что на зарубежном stackoverflow дискуссии на порядок выше, а здесь люди не видят разницы межу классом и инстансом

Mike
17.05.2017
13:59:21
новички есть везде

Friedrich
17.05.2017
14:01:32
честно, мне больно от того, что на зарубежном stackoverflow дискуссии на порядок выше, а здесь люди не видят разницы межу классом и инстансом
У нас с тобой разные StackOverflow, похоже. Как соберёшься отвечать на вопросы — так там (иногда) народ такую чушь несёт.

А вообще — ну, класс это инстанс метакласса. Это всем известно :)

Mike
17.05.2017
14:02:54
ну строго говоря класс в JS это функция

Friedrich
17.05.2017
14:02:57
Говоря научным языком, множество Set₁ является членом множества Set₂.

Google
Mike
17.05.2017
14:02:59
которая конструктор

Aleh
17.05.2017
14:03:09
а функция это объект

так что)

Narek
17.05.2017
14:03:15
Что-то вы далеко зашли, ребята

Friedrich
17.05.2017
14:03:21
Но и объект это тоже объект :)

Mike
17.05.2017
14:03:39
Что-то вы далеко зашли, ребята
то что я скинул последним, это то что тебе нужно?

или нет?

Aleh
17.05.2017
14:03:58
или нет?
не, там учитывается конструктор

Narek
17.05.2017
14:04:04
Нет, попробуй поменять конструктор у B

В свифте, например, для такого есть Class.self, кстати

Aleh
17.05.2017
14:07:52
тут тебе надо взять typeof и откинуть конструктор, это rest type, их еще нет, но я не уверен, будет ли там возможность указать конструктор

Сергей
17.05.2017
14:08:28
чет у меня не видит cadesplugin

Сергей
17.05.2017
14:09:56


Mike
17.05.2017
14:27:08
Нет, попробуй поменять конструктор у B
а тебе нужно создавать объекты этого переданного класса внути, или только вызывать функции на нём?

https://www.typescriptlang.org/play/index.html#src=class%20A%20%7B%0A%20%20%20%20static%20test()%3A%20void%20%7Bconsole.log('A%3A%3Aqq')%20%7D%0A%20%20%20%20static%20test2()%3A%20void%20%7Bconsole.log('A%3A%3Aqq2')%20%7D%0A%7D%0A%0Aclass%20B%20extends%20A%20%7B%0A%20%20%20%20static%20test2()%3A%20void%20%7B%20console.log('B%3A%3Aqq2')%20%7D%0A%0A%20%20%20%20public%20constructor(p%3Anumber)%20%7B%20%0A%20%20%20%20%20%20%20%20super()%3B%0A%20%20%20%20%7D%0A%7D%0A%0Atype%20Wrapper%3CT%3E%20%3D%20%7B%0A%20%20%20%20%5BP%20in%20keyof%20T%5D%3A%20T%5BP%5D%3B%0A%7D%3B%0A%0A%0Afunction%20f(a%3A%20Wrapper%3Ctypeof%20A%3E)%20%7B%0A%20%20%20%20a.test()%0A%20%20%20%20a.test2()%0A%20%20%20%20%2F%2Flet%20ainst%20%3D%20new%20a()%3B%0A%7D%0A%0Af(B)%3B%0AB.test2()

вот так можно, это именно откидывание конструктора

Narek
17.05.2017
14:32:17
Вот, такое работает?

Mike
17.05.2017
14:39:14
Вот, такое работает?
но вообще это какая-то странная штука, обычно если ты такое хочешь, то либо ты очень хорошо понимаешь что ты хочешь и делаешь что-то очень нетривиальное, либо ты что-то делаешь не так. Второе гораздо более часто встречается

Narek
17.05.2017
14:40:38
Ну в моем случае, классы, которые нужно передавать - это модели просто. И в другом классе нужно у них получать кое-какие данные через статические методы. Создавать для такого инстансы - не очень красиво, мне кажется

Mike
17.05.2017
14:43:52
ну вообще лучше наверно модели инстансами положить

Google
Narek
17.05.2017
14:44:15
Почему?

Mike
17.05.2017
14:45:31
хз как объяснить. Да так можно сделать, но обычно никто так не делает, тхз какие потом проблемы вылезут

Narek
17.05.2017
14:46:38
Хз, может и вылезут. У меня это в одном месте используется, не думаю, что какие-то проблемы будут.

Mike
17.05.2017
14:47:23
ну как хочешь

Narek
17.05.2017
14:55:11
они через декораторы записываются

Aleh
17.05.2017
14:55:37
куда и зачем для этого статические методы у класса?

Narek
17.05.2017
14:56:11
В конструктор через декораторы записываются данные, а статические методы их отдают

Admin
ERROR: S client not available

Ivan
17.05.2017
15:35:15
рефлекшн для беднызх

Дмитрий
17.05.2017
16:21:41
Если вы захотите найти ссылку на репл тайпскрипта через Гугл, никогда, слышите, никогда не гуглите "ts playground"

Dreamerinnoise
17.05.2017
16:21:54
баян

Дмитрий
17.05.2017
16:22:03
Надеюсь, меня хоть не уволят

Может и баян, но я же не знал

Dreamerinnoise
17.05.2017
16:22:32
я тут случайно загуглил ts playground, очень интересное мнение гугла на этот счёт. Сслыки не привожу по морально-этическим соображеням:)

Mike
17.05.2017
16:22:43
да-да ts roadmap тоже указывает на роадмап этих ...

Дмитрий
17.05.2017
16:25:09
А я ещё открываю такой ссылки в фоновых вкладках по инерции

?

Adam
17.05.2017
18:55:28
ts REPl - npm ts-node

Google
Adam
17.05.2017
18:57:34
install забыл

Aleh
17.05.2017
21:23:39
Сергей
18.05.2017
08:45:55
кто нибудь знает как можно в typings/*.d.ts файде ts2 объявить глобальную переменную?



нигде не видит cadesplugin

Friedrich
18.05.2017
08:53:28
Кажись, когда ты в файле пишешь import, он перестаёт считаться файлом с дефинишенами и становится обычным модулем.

Попробуй убрать импорт.

Сергей
18.05.2017
08:53:53
кстати, js файл не хочет идти в бандл

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

тоже не видит

Сергей
18.05.2017
08:55:14
видимо буду делать приватный npm-пакет

Friedrich
18.05.2017
08:56:04
а если тебе надо заимпортить интерфейс?
Я какими-то костылями на этот случай обкладываюсь, примерно такого вида: interface Xxx { } declare module 'something' { export default moduleVar: Xxx; } (т.е. важно, чтобы интерфейс был вне модуля, тогда он виден снаружи везде)

Но я не уверен, что это универсально правильная идея. Может быть, есть и решение получше.

@sergeysova смотри что есть: https://github.com/Microsoft/TypeScript/issues/7352#issuecomment-191547232 declare global какой-то.

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