
Alexander
23.11.2017
09:11:07
Хай. Ай нид хэлп. Мне нужно импортнунть в src/file.ts уже существующий js модуль из корня проекта (other.js). Сейчас получается так:
dist
- src
- file.js
Как убрать src из dist?

Max
23.11.2017
09:20:36
dist?
ты дист включаешь в пути?

Alexander
23.11.2017
09:22:15
dist это outDir

Google

Max
23.11.2017
09:23:27
короче ничего не понял
но глянь include в tsconfig

Alexander
23.11.2017
09:25:03
в dist должен лежать только test.js
если в test.ts не импортить file.js то так и получается

Le
23.11.2017
09:34:48
уф, а можно как-то из такого типа
{
description: string;
args: Arg[];
};
получить такой
{
description: string;
args: Partial<Arg>[];
};
?
пробую | и & но получается ерунда

Morsik
23.11.2017
10:54:17
А партишл как описан?

Дмитрий
23.11.2017
10:59:38
type Partial<T> = {
[P in keyof T]?: T[P];
};

Le
23.11.2017
11:19:53
суть в том, что мне нужно получить копию типа но с измененным типом одного свойства

andretshurotshka?❄️кде
23.11.2017
11:21:06
Спреды)
которых не завезли

Le
23.11.2017
11:24:58
?

Google

Aleh
23.11.2017
11:26:01
для такого вроде нужна возможность исключить конкретное свойство, взять тип элемента массива, вроде нельзя такого

Morsik
23.11.2017
11:26:44
тип элемента массива по идее можно через итераторы
но там тернарник не напишешь

Aleh
23.11.2017
11:28:21
тип элемента можно по индексу получить
https://www.typescriptlang.org/play/index.html#src=%0Atype%20ArrayElement%3CA%20extends%20Array%3Cany%3E%3E%20%3D%20A%5B0%5D%0A%0Atype%20E%20%3D%20ArrayElement%3CArray%3C%7B%20a%3A%20number%20%7D%3E%3E
хахаки

andretshurotshka?❄️кде
23.11.2017
12:19:48
export type StringOmit<L1 extends string, L2 extends string> = ({ [P in L1]: P } &
{ [P in L2]: never } & { [key: string]: never })[L1]
export type ObjectOverwrite<O1, O2> = Pick<O1, StringOmit<keyof O1, keyof O2>> & O2
лучше бы было если бы спреды наконец-то добавили

Aleh
23.11.2017
12:23:20
хм

andretshurotshka?❄️кде
23.11.2017
12:25:48

Ilya
23.11.2017
12:28:01
Ого, это валидный тип?

andretshurotshka?❄️кде
23.11.2017
12:29:50
а как чекнуть что в поле объекта массив?)
на типах)

Aleh
23.11.2017
12:30:11

andretshurotshka?❄️кде
23.11.2017
12:30:24
в маппед типе
type PartialArrayKey<O, Key extends keyof O> = ObjectOverwrite<
O,
{[P in Key]: Partial<ArrayElement<O[P]>> }
>

Aleh
23.11.2017
12:30:35
в mapped вообще особо проверять нельзя)

andretshurotshka?❄️кде
23.11.2017
12:30:39
эх

Google

Aleh
23.11.2017
12:30:58
но вообще ифы можно запилить

andretshurotshka?❄️кде
23.11.2017
12:31:46
export type IsArrayType<T> = DefinitelyYes<ObjectHasKey<T, ArrPrototypeMethods»
лол
че там только не найдешь

Aleh
23.11.2017
12:32:04
лол

andretshurotshka?❄️кде
23.11.2017
12:32:40
https://github.com/tycho01/typical/blob/master/src/union.ts
тут вообще много всякого)
https://github.com/tycho01/typical/blob/master/src/boolean.ts

Aleh
23.11.2017
12:33:29
надо почитать
я так и не придумал как циклы сделать https://gist.github.com/mkusher/ad5638b75d94d8da19e4a436b525748e

andretshurotshka?❄️кде
23.11.2017
12:39:22
так все равно ошибка


andretshurotshka?❄️кде
23.11.2017
12:39:23
If<IsArrayType<O[P]>, Partial<ArrayElement<O[P]», O[P]>
можно как-то лениво вызвать?)
>Text buffer too large to share. Run JavaScript
ээ
плэйграунд поехавший)
ого
оно с ошибкой работает
http://www.typescriptlang.org/play/#src=type%20Obj%3CT%3E%20%3D%20%7B%20%5Bk%3A%20string%5D%3A%20T%20%7D%3B%0Atype%20ArrPrototypeMethods%20%3D%20'length'%20%7C%20'push'%20%7C%20'pop'%20%7C%20'concat'%20%7C%20'join'%20%7C%20'reverse'%20%7C%20'shift'%20%7C%20'slice'%20%7C%20'sort'%20%7C%20'splice'%20%7C%20'unshift'%20%7C%20'indexOf'%20%7C%20'lastIndexOf'%20%7C%20'every'%20%7C%20'some'%20%7C%20'forEach'%20%7C%20'map'%20%7C%20'filter'%20%7C%20'reduce'%20%7C%20'reduceRight'%20%7C%20'find'%20%7C%20'findIndex'%20%7C%20'fill'%20%7C%20'copyWithin'%20%7C%20'entries'%20%7C%20'keys'%20%7C%20'values'%3B%0Atype%20ObjectHasKey%3C%0A%20%20O%20extends%20%7B%7D%2C%0A%20%20K%20extends%20string%0A%3E%20%3D%20UnionHasKey%3Ckeyof%20O%2C%20K%3E%3B%0Atype%20UnionHasKey%3CUnion%20extends%20string%2C%20K%20extends%20string%3E%20%3D%20(%7B%5BS%20in%20Union%5D%3A%20'1'%20%7D%20%26%20Obj%3C'0'%3E)%5BK%5D%3B%0Atype%20Bool%20%3D%20'0'%20%7C%20'1'%3B%0Atype%20Not%3CT%20extends%20Bool%3E%20%3D%20%7B%20'1'%3A%20'0'%3B%20'0'%3A%20'1'%3B%20%7D%5BT%5D%3B%0Atype%20And%3C%0A%20%20A%20extends%20Bool%2C%0A%20%20B%20extends%20Bool%0A%3E%20%3D%20(%7B%201%3A%20%7B%201%3A%20'1'%20%7D%20%26%20Obj%3C'0'%3E%20%7D%20%26%20Obj%3CObj%3C'0'%3E%3E)%5BA%5D%5BB%5D%3B%0Atype%20Indeterminate%3CT%20extends%20string%3E%20%3D%20And%3C%0A%20%20UnionHasKey%3CT%2C%20'0'%3E%2C%0A%20%20UnionHasKey%3CT%2C%20'1'%3E%0A%3E%3B%0Atype%20Determinate%3CT%20extends%20Bool%3E%20%3D%20Not%3CIndeterminate%3CT%3E%3E%3B%0Atype%20DefinitelyYes%3CT%20extends%20Bool%3E%20%3D%20And%3CT%2C%20Determinate%3CT%3E%3E%3B%0Atype%20IsArrayType%3CT%3E%20%3D%20DefinitelyYes%3CObjectHasKey%3CT%2C%20ArrPrototypeMethods%3E%3E%0Atype%20ArrayElement%3CA%20extends%20Array%3Cany%3E%3E%20%3D%20A%5B0%5D%0Atype%20StringOmit%3CL1%20extends%20string%2C%20L2%20extends%20string%3E%20%3D%20(%0A%20%20%20%20%7B%5BP%20in%20L1%5D%3A%20P%20%7D%20%26%0A%20%20%20%20%7B%5BP%20in%20L2%5D%3A%20never%20%7D%0A%20%20%20%20%26%20%7B%20%5Bkey%3A%20string%5D%3A%20never%20%7D)%5BL1%5D%0Atype%20ObjectOverwrite%3CO1%2C%20O2%3E%20%3D%20Pick%3CO1%2C%20StringOmit%3Ckeyof%20O1%2C%20keyof%20O2%3E%3E%20%26%20O2%3B%0Atype%20If%3CCond%20extends%20Bool%2C%20Then%2C%20Else%3E%20%3D%20%7B%201%3A%20Then%2C%200%3A%20Else%20%7D%5BCond%5D%3B%0Atype%20Meme%20%3D%20%7B%20b%3A%20number%20%7D%0Atype%20A%20%3D%20%7B%0A%20%20%20%20a%3A%20string%3B%0A%20%20%20%20b%3A%20Meme%5B%5D%0A%7D%0Atype%20PartialArrayKey%3CO%2C%20Key%20extends%20keyof%20O%3E%20%3D%20ObjectOverwrite%3C%0A%20%20%20%20O%2C%0A%20%20%20%20%7B%5BP%20in%20Key%5D%3A%20If%3CIsArrayType%3CO%5BP%5D%3E%2C%20Partial%3CArrayElement%3CO%5BP%5D%3E%3E%5B%5D%2C%20O%5BP%5D%3E%20%7D%0A%3E%0Atype%20B%20%3D%20PartialArrayKey%3CA%2C%20'b'%3E

Google

andretshurotshka?❄️кде
23.11.2017
12:42:55
@mkusher

Aleh
23.11.2017
12:44:15
Ша вернусь к компу и гляну)

Le
23.11.2017
13:20:40

andretshurotshka?❄️кде
23.11.2017
13:22:03

Дмитрий
23.11.2017
13:22:44
tycho ето так, адепт просто
А вот у gcanti код выглядит так, будто если прочитать его с нужной интонацией, то можно кастануть фаербол

andretshurotshka?❄️кде
23.11.2017
13:23:04
у gcanti поменьше кода в typelevel-ts)
так что тут tycho вин

Admin
ERROR: S client not available

andretshurotshka?❄️кде
23.11.2017
13:23:23
и gcanti не делает пуллы в компилятор

Дмитрий
23.11.2017
13:24:34
Зачем ему чужой

Le
23.11.2017
13:24:37

andretshurotshka?❄️кде
23.11.2017
13:25:35
export type StringOmit<L1 extends string, L2 extends string> = ({ [P in L1]: P } &
{ [P in L2]: never } & { [key: string]: never })[L1]
export type ObjectOmit<O, K extends string> = Pick<O, StringOmit<keyof O, K>>
type Type = ObjectOmit<CommandInfo, 'args'>

Дмитрий
23.11.2017
13:28:35
?
Я был уверен что он там себе уже забабахал Тьюринг полную систему типов ?

andretshurotshka?❄️кде
23.11.2017
13:28:58
было бы норм если бы Omit добавили в сам тс)
или вычитание юнионов

Le
23.11.2017
13:29:27

andretshurotshka?❄️кде
23.11.2017
13:29:54
вычитанием строк)

Google

andretshurotshka?❄️кде
23.11.2017
13:30:28
https://github.com/gcanti/typelevel-ts

Le
23.11.2017
13:31:26
жесть какая, даже работает вроде
а куда бы эти Omit и прочие приколюхи по хорошему положить в проекте?

Aleh
23.11.2017
14:06:26

Mike
23.11.2017
14:07:20

Дмитрий
23.11.2017
14:07:20
Жаль

Le
23.11.2017
14:07:39

Дмитрий
23.11.2017
14:07:56
Я уже начал прикидывать, кто первый запустит на типах тайпскрипта майнкрафт

Mike
23.11.2017
14:07:56
https://github.com/Microsoft/TypeScript/issues/14833

Aleh
23.11.2017
14:08:23
это 1.8 вроде
а, 2.2 еще тоже

Дмитрий
23.11.2017
14:09:16
Ламповый 1.8

Mike
23.11.2017
14:09:21
жаль, а какой был задел

Сергей
23.11.2017
14:09:36


Mike
23.11.2017
14:09:48
я думал ща сделают хоть какой-нибудь способ кодогенерации по типам и получим программирование на шаблонах как в плюсах

andretshurotshka?❄️кде
23.11.2017
14:10:03
в нпм есть

Aleh
23.11.2017
14:10:36

Mike
23.11.2017
14:11:02
это возможность. Пользоваться или нет каждый решает сам, и если пользоваться то во благо или зло тоже

Aleh
23.11.2017
14:11:02
кодогенерация все-таки немного отдельно от полноты