
Сергей
06.04.2017
15:16:58

Дмитрий
06.04.2017
15:17:01
Сколько примерно баллов по шкале четкости?

Dreamerinnoise
06.04.2017
15:17:36
10 из 10, конечно же.

Дмитрий
06.04.2017
15:18:24
Верю на слово

Google

Aleh
06.04.2017
15:41:50

Artur
06.04.2017
17:49:00

Aleh
06.04.2017
17:55:43

Сергей
06.04.2017
17:56:33

Artur
06.04.2017
17:56:39

Aleh
06.04.2017
17:56:48
и в хаскеле

Artur
06.04.2017
17:56:51
Возможно что то будет с внедрением variadic types

Aleh
06.04.2017
17:57:58
есть определенные сомнения
ну типа вариативность сложно, а это норм, осилим?)

andretshurotshka?❄️кде
06.04.2017
20:28:22
лол

Алишер
07.04.2017
08:42:21
добрый день. по TS можно задавать вопросы?

Google

Aleh
07.04.2017
08:43:27
:)

Алишер
07.04.2017
08:47:40
тогда подскажите как типизировать классы...
Есть класс, в конструкторе он принимает классы:у которых д.б. несколько ownProperty и более одного статичного метода, которые возвращают различные типы?

Aleh
07.04.2017
08:50:06
?

Artur
07.04.2017
08:54:16

Алишер
07.04.2017
08:54:30
сами классы

Artur
07.04.2017
08:54:52
У самого класса должны быть ownProperty или у инстанса?

Алишер
07.04.2017
08:55:10
у самого
щас поясню на примере

Artur
07.04.2017
08:55:43
Класс можно типизировать интерфейсом:
interface ClassConstructor<T> {
new(...args: any[]): T
property1: type1
}

Aleh
07.04.2017
08:55:54
ну или typeof

Artur
07.04.2017
08:56:25
ну или typeof
Я так понимаю Алишер хочет принимать разные конструкторы классов, которые имеют некий shape
typeof делать не от чего
или есть от чего?

Aleh
07.04.2017
08:56:44
я вот по описанию ваще не понял о чем речь(

Artur
07.04.2017
08:56:57
Угу, гадание на кофейной гуще какое-то

Алишер
07.04.2017
08:57:19
@module('dogs')
class Dogs{
static wof(params){
return 'wof'
}
static wof2(params){
return 'wof2'
}
}
это один из классов который в конструкторе принимает наш класс
т.е.
class Base{
_defs;
constructor(private animals){
this.init();
}
init(){
animals.forEach(animal=>{
let module = animal.name;
let properties = Object.getOwnPropertyNames(animal);
properties.forEach(method=>{
this._defs.push(method);
});
});
}
}
декоратор @module добавляет свойство name классу Dogs

Google

Алишер
07.04.2017
09:04:03
сумел объяснить?


Aleh
07.04.2017
09:07:26
сумел объяснить?
https://www.typescriptlang.org/play/index.html#src=type%20Class%3CT%3E%20%3D%20%7B%0A%20%20new%20(...args%3A%20any%5B%5D)%3A%20T%0A%7D%0A%0Afunction%20module(name%3A%20string)%20%7B%0A%20%20return%20function%20%3CA%20extends%20Class%3Cany%3E%3E(someClass%3A%20A)%3A%20A%20%26%20%7B%20name%3A%20string%20%7D%20%7B%0A%20%20%20%20return%20someClass%3B%0A%20%20%7D%20%0A%7D%0A%0A%40module('dogs')%0Aclass%20Dogs%20%7B%0A%20%20static%20wof(params)%7B%0A%20%20%20%20return%20'wof'%0A%20%20%7D%0A%20%20static%20wof2(params)%7B%0A%20%20%20%20return%20'wof2'%0A%20%20%7D%0A%7D%0A%0Aclass%20Base%7B%0A%20%20_defs%3B%0A%20%20constructor(private%20animals%3A%20Class%3CDogs%3E%5B%5D)%7B%0A%20%20%20%20this.init()%3B%0A%20%20%7D%20%0A%20%20init()%7B%0A%20%20%20%20this.animals.forEach(animal%3D%3E%7B%0A%20%20%20%20%20%20let%20module%20%3D%20animal.name%3B%0A%20%20%20%20%20%20let%20properties%20%3D%20Object.getOwnPropertyNames(animal)%3B%0A%20%20%20%20%20%20properties.forEach(method%3D%3E%7B%0A%20%20%20%20%20%20%20%20this._defs.push(method)%3B%0A%20%20%20%20%20%20%7D)%3B%0A%20%20%20%20%7D)%3B%0A%20%20%7D%0A%7D


Алишер
07.04.2017
09:08:13
oh shi..
попытаюсь понять), спасибо

Aleh
07.04.2017
09:08:42
да там почти ничего не изменилось
в одном месте тип прописал и module определил

Алишер
07.04.2017
09:11:12
просто дженерики не совсем еще понимаю
type Class<T> = {
new (...args: any[]): T
}
почему new? я там вообще нигде не беру объект класса
так, еще раз.
есть
function module(name:string):<xz1>{
return function (target:<xz2>):void?{
target.name=name || '';
}}
@module('dogs')
class Dog{}
научите

Aleh
07.04.2017
09:32:01
так подсмотри в моем варианте

Aleh
07.04.2017
09:32:26

Алишер
07.04.2017
09:33:28
понял, т.е. это формальность
таким образом типы для класса прописываются.
function module(name: string) {
return function <A extends Class<any»(someClass: A): A & { name: string } {
return someClass;
}
}
вот тут подругому:
function module(name: string) {
return function <A extends Class<any»(target: A):void {
target.name=name;
}
}
вот так правыильно?
тогда, мне в класс Base нужно чтобы поступали уже декорированные классы
значит я обозначаю
type Class<T> = {
new (...args: any[]): T;
name:string;
}

Google

Алишер
07.04.2017
09:59:57
Aleh

Aleh
07.04.2017
13:49:44
ну примерно
я ж скинул рабочий пример, делай с оглядкой на него

Gordey
07.04.2017
13:52:31
товарищи типизировщики
подскажите

Admin
ERROR: S client not available

Gordey
07.04.2017
13:53:30
если у меня есть конфиг, где лежит массив объектов, в каждом из которых набор полей
и я хочу в этом конфиге описать тип каждого поля, потому что потом по этому конфигу исходя из типа, оно будет по разному обрабатываться
мне в этой ситуации ваще может как-то упростить жизнь flow или ts?

Aleh
07.04.2017
13:55:22
ну если это просто статичный объект, то и ts, и flow сами выведут его тип
статичный объект типа
export const config = {
// your config here
}

Gordey
07.04.2017
13:56:21
не, ты меня наверно не понял )

Aleh
07.04.2017
13:58:03
я такой)

Gordey
07.04.2017
13:59:21
вот например есть объект в этом массиве{ a, b }
и я знаю, что значение а у меня будет строка, а b - массив - и их нужно будет по разному обрабатывать
соответсвенно я могу написать: { a: { type: 'string' }, b: { type: 'array' }} и тогда моя дальнейшая механика обрабатывая этот конфиг может опираться на поле type
вот с помощью flow/ts я могу как-то без поля type это сделать
или это не тот кейс, где они могут помочь
ну т.е. выглядит это как просто матчинг на определенное поле в каждом объекте
но по факту там будут именно типы

Aleh
07.04.2017
14:02:38
можешь пример написать минимальный?)

Gordey
07.04.2017
14:03:10
блин)

Google

Aleh
07.04.2017
14:05:15
ну вот с этими a,b твой текущий код на babel/repl, typescript/play чтоб сразу прям
я просто не понимаю, что тебе надо с этим делать

Gordey
07.04.2017
14:23:43
http://codepen.io/lgordey/pen/JWQKZr
в зависимости от поля type (или какого-то абстрактного типа) будет рендериться определенный компонент
основная мысль в этом
кароч видимо типизация тут не причем) мне чет казалось, что каким-то боком упростит
в общем я хотел бы, чтобы вместо поля type, было что-то вроде
a<type: absctract_a>: 'и тут строка еще, значения поля'
без лишней вложенности
но чтоб это abstract можно было потом по аналогии обработать, как с полем type

andretshurotshka?❄️кде
07.04.2017
14:43:13
тайпскрипт тут никак не поможет, типов в рантайме нет

Gordey
07.04.2017
14:54:43
да вот хочется синтаксисом статической хреначить в рантайме
ну да ладно, спс)

Vladimir
07.04.2017
14:56:44
Нет, это вполне возможно

andretshurotshka?❄️кде
07.04.2017
14:56:59

Vladimir
07.04.2017
14:57:14
https://github.com/gcanti/io-ts

Mike
07.04.2017
14:58:17
не юзал, но попробую прям завтра