@typescript_ru

Страница 333 из 669
LiberateAI
25.08.2017
16:37:02
"q".repeat(Number.MAX_SAFE_INTEGER);
В лисе не работает, ссылается на https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Resulting_string_too_large Да и в хроме тоже)

Павел
26.08.2017
11:12:44
Друзья, подскажите, что я делаю не так? Есть функция foo, которая вызывает processBar, передавая свой аргумент ей. Функцию foo я вызываю, передавая ей тип Bar. При этом компилятор подсвечивает ошибку о несовпадении параметров при вызове processBar. Пример, о котором идет речь, тут: https://www.typescriptlang.org/play/#src=const%20myBar%3A%20Bar%20%3D%20%7B%20zoo%3A%20true%7D%3B%0D%0Afoo%3CBar%3E(myBar)%3B%0D%0A%0D%0Ainterface%20Bar%20%7B%0D%0A%20%20%20%20zoo%3A%20boolean%3B%0D%0A%7D%0D%0A%0D%0Afunction%20foo%3CT%3E(f%3A%20T)%3A%20void%20%7B%0D%0A%20%20%20%20processBar(f)%3B%0D%0A%7D%0D%0A%0D%0Afunction%20processBar(bar%3A%20Bar)%3A%20void%20%7B%0D%0A%20%20%20%20console.log(bar)%3B%0D%0A%7D%0D%0A

Google
Andrey
26.08.2017
11:17:03
T может быть любым, а proccessBar принимает только определенный

Aleh
26.08.2017
11:17:08
f(1) тоже валидно

но очевидно 1 не Bar

Павел
26.08.2017
11:20:11
Да, это понятно, что типы не совпадают, в этом и проблема, решение которой, я подозреваю, в приведении аргумента f к требуемому типу Bar. Вопрос, собственно, в том, как это сделать?

Aleh
26.08.2017
11:20:44
https://www.typescriptlang.org/play/#src=const%20myBar%3A%20Bar%20%3D%20%7B%20zoo%3A%20true%7D%3B%0D%0Afoo(myBar)%3B%0D%0A%0D%0Ainterface%20Bar%20%7B%0D%0A%20%20%20%20zoo%3A%20boolean%3B%0D%0A%7D%0D%0A%0D%0Afunction%20foo(f%3A%20Bar)%3A%20void%20%7B%0D%0A%20%20%20%20processBar(f)%3B%0D%0A%7D%0D%0A%0D%0Afunction%20processBar(bar%3A%20Bar)%3A%20void%20%7B%0D%0A%20%20%20%20console.log(bar)%3B%0D%0A%7D%0D%0A

Aleh
26.08.2017
11:21:57
либо делайте проверки

Aleh
26.08.2017
11:22:41
опишите задачу, а то гадать не хочется

Павел
26.08.2017
11:22:51
Мой пример в песочнице — это упрощенный вариант корневого редьюсера и вложенных редьюсеров в redux, где action может быть разным, типизированным для каждого действия.

Andrey
26.08.2017
11:23:13
T extends Bar

https://www.typescriptlang.org/play/#src=const%20myBar%3A%20Bar%20%3D%20%7B%20zoo%3A%20true%7D%3B%0D%0Afoo%3CBar%3E(myBar)%3B%0D%0A%0D%0Ainterface%20Bar%20%7B%0D%0A%20%20%20%20zoo%3A%20boolean%3B%0D%0A%7D%0D%0A%0D%0Afunction%20foo%3CT%3E(f%3A%20T)%3A%20void%20%7B%0D%0A%20%20%20%20processBar(f)%3B%0D%0A%7D%0D%0A%0D%0Afunction%20processBar(bar%3A%20Bar)%3A%20void%20%7B%0D%0A%20%20%20%20console.log(bar)%3B%0D%0A%7D%0D%0A

Google
Andrey
26.08.2017
11:24:20
Вот так.

Aleh
26.08.2017
11:25:07
https://www.typescriptlang.org/play/#src=type%20Action1%20%3D%20%7B%0D%0A%20%20%20%20type%3A%20%22Action1%22%0D%0A%20%20%20%20field1%3A%20number%0D%0A%7D%0D%0A%0D%0Atype%20Action2%20%3D%20%7B%0D%0A%20%20%20%20type%3A%20%22Action2%22%0D%0A%20%20%20%20field2%3A%20string%0D%0A%7D%0D%0A%0D%0Atype%20Action%20%3D%20Action1%20%7C%20Action2%0D%0A%0D%0Atype%20State%20%3D%20%7B%7D%20%7C%20null%0D%0A%0D%0Afunction%20reducer(state%3A%20State%20%3D%20null%2C%20action%3A%20Action)%20%7B%0D%0A%20%20%20%20switch%20(action.type)%20%7B%0D%0A%20%20%20%20%20%20%20%20case%20%22Action1%22%3A%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20action.field1.toFixed()%20%2F%2F%20number%0D%0A%20%20%20%20%20%20%20%20case%20%22Action2%22%3A%0D%0A%20%20%20%20%20%20%20%20%20%20%20%20return%20action.field2.charAt%3B%20%2F%2F%20string%0D%0A%20%20%20%20%7D%0D%0A%20%20%20%20return%20state%0D%0A%7D

Friedrich
27.08.2017
05:27:04
Господа, я что-то сегодня с утра вообще туплю на примитивном коде. Есть file1.ts: export default class SomeClass1 {} И есть file2.ts: import * as Class1 from "./file1"; function foo(c: Class1): void { // Cannot find name "Class1" let x = 2 + 2; } Что я делаю не так?

Разобрался. Нужно было import Class1 from "./file1". Я вообще не знал, что так можно %)

Andrew
27.08.2017
06:06:42
По-моему первый вариант тоже может работать, но там import * as nsp from "...", и потом везде юзаешь nsp.Class1

Friedrich
27.08.2017
07:28:06
По-моему первый вариант тоже может работать, но там import * as nsp from "...", и потом везде юзаешь nsp.Class1
Пробовал — не работает. Причём даже автодополнялка в vscode подсказывает — мол, есть nsp.SomeClass1, но компилятор потом обламывает.

В этом случае же ведь получается, что nsp это и есть SomeClass1.

Eugene
27.08.2017
08:05:39
Хз, сюда или нет вопрос. Но юзаю я такой например React с Typescript, и тут у меня функция handleSubmit(e) которая обрабатывает onSubmit, какой тип у e ?

Eugene
27.08.2017
08:15:00
Andrew
27.08.2017
10:16:38
В этом случае же ведь получается, что nsp это и есть SomeClass1.
Как такое может быть? А если файл экспортит несколько сущностей?

Friedrich
27.08.2017
10:18:26
Ну на то там и export default, что ты хочешь что-то основное экспортить без неймспейса, так ведь?

Хотя я, похоже, вообще не умею в export default, и поэтому путаюсь. Тот вопрос, который я задавал утром, вообще не должен был бы возникнуть, если б я прочитал документацию по модулям :)

Aleh
27.08.2017
10:22:33
nsp.default

Friedrich
28.08.2017
04:22:38
Обнаружил превосходную фичу: class FooBar { v = 100500; foo(this: FooBar) { return this.v; } } const foo = new FooBar().foo; foo(); // ошибка, если включена опция --noImplicitThis Я действительно хочу, чтобы в этом случае компилятор указывал на ошибку. Однако, меня парит каждый раз во всех нестатических методах класса писать this: ClassName. Почему это не делается по умолчанию?

Ivan
28.08.2017
13:12:22
@fvnever зайди в checker.ts, посмотри :)

удачи с этим

Friedrich
28.08.2017
13:13:08
Не могу открыть, там не видно ничего! ?

Вообще, был уже один экспериментатор, который пытался включить эту фичу по умолчанию. Его PR даже смержили, а потом спешно откатили, потому что резко начал проседать перфоманс. Видимо, просто не вполне удачной была реализация.

Google
Friedrich
28.08.2017
13:14:15
Щас найду, минутку.

а можно линк?
Вот изначальный PR с фичей: - https://github.com/Microsoft/TypeScript/issues/6018 Вот тут его откатили (частично; неоткаченную часть мы сегодня знаем как --noImplicitThis): - https://github.com/Microsoft/TypeScript/issues/7689 А вот чуваки просят добавить фичу обратно: - https://github.com/Microsoft/TypeScript/issues/7968

andretshurotshka?❄️кде
28.08.2017
18:35:35
type A = { a: 'b', c: 'd' } type B = Swap<A> // { b: 'a', d: 'c' } как такое сделать с mapped types?

Сергей
28.08.2017
18:36:06
Покажи исходник Swap

andretshurotshka?❄️кде
28.08.2017
18:36:18
так я спрашиваю как написать Swap)

Сергей
28.08.2017
18:36:23
А

Aleh
28.08.2017
18:37:05
нельзя менять ключ вроде

andretshurotshka?❄️кде
28.08.2017
19:03:43
хм

Eugene
28.08.2017
19:04:19
А если там не строка? Как ты ключом сделаешь его сделаешь?

andretshurotshka?❄️кде
28.08.2017
19:04:59
там строка всегда

походу реально никак

andretshurotshka?❄️кде
28.08.2017
19:06:36


https://github.com/tycho01/typical/issues/4 лол

чувак запилил)

export type Obj<T> = { [k: string]: T }; export type UnionHasKey<Union extends string, K extends string> = ({[S in Union]: '1' } & Obj<'0'>)[K]; export type If<Cond extends '0'|'1', Then, Else> = { 1: Then, 0: Else }[Cond]; type A = { a: 'b', c: 'd' }; type Keys = keyof A; // "a" | "c" type Vals = A[keyof A]; // "b" | "d" type y = {[P1 in Vals]: {[P2 in keyof A]: If<UnionHasKey<A[P2], P1>, P2, never> }[Keys] }; // { b: "a"; d: "c"; } type Swap< T extends { [k: string]: string }, Keys extends keyof T = keyof T, Vals extends string = T[Keys] > = {[P1 in Vals]: {[P2 in Keys]: If<UnionHasKey<T[P2], P1>, P2, never> }[Keys]}; type B = Swap<A>;

Admin
ERROR: S client not available

andretshurotshka?❄️кде
28.08.2017
19:28:55
зацените

Aleh
28.08.2017
19:29:22
а, ну красиво да

andretshurotshka?❄️кде
28.08.2017
19:29:40
а, ну красиво да
не, это я пытался запилить)

Google
Aleh
28.08.2017
19:30:15
Дмитрий
29.08.2017
09:20:41
type A = 'a' | 'b' type TB = { [P in A]: string } interface IB { [P in A]: string } Я, наверное, что-то совсем глупое делаю, но почему в типе это работает, а в интерфейсе нет?

И как, собственно, добиться нужного результата при использовании интерфейса?

dima
29.08.2017
09:34:34
не по теме. Знаком кто с sequelize ?

Ivan
29.08.2017
09:38:48
я знакм

Denis
29.08.2017
09:52:04
https://github.com/guidojo/multipleTypescriptCompilers

dima
29.08.2017
10:34:39
Дмитрий
29.08.2017
10:46:19
юзай типы, в чем проблема?
это функция, внутри которой есть еще несколько методов, типа interface Log { (data: string): void debug (data: string): void … }

Aleh
29.08.2017
10:46:43
type Log = { (data: string): void debug(data: string): void }

и т.д.

Дмитрий
29.08.2017
10:47:09
я не хочу вручную писать все эти debug, fatal и прочие

export type ITerminalLoggerLevels = 'debug' | 'info' | 'warn' | 'error' | 'fatal'

Сейчас сделал так: type Logger = (data: string) => void type ITerminalLogger = Logger & { [P in ITerminalLoggerLevels]: Logger }

andretshurotshka?❄️кде
29.08.2017
16:50:07
?

sne18
29.08.2017
17:34:26
Народ, в какой группе найти TypeScript разработчика ?

Mikhail
29.08.2017
17:37:24
Google
Artem
29.08.2017
17:45:41
Народ, в какой группе найти TypeScript разработчика ?
ещё в майкрософт стек джобс (могу в лс ссылку дать, сюда кидать не буду, хз как тут модераторы относятся к такому)

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