
Дмитрий
18.07.2017
09:31:46

Сергей
18.07.2017
09:31:57
чет мне кажется declare в коде юзать как-то пахнет

andretshurotshka?❄️кде
18.07.2017
09:32:00
я так пытался чужой модуль описать

Google

Дмитрий
18.07.2017
09:32:12
Да какая разница

andretshurotshka?❄️кде
18.07.2017
09:32:21

Дмитрий
18.07.2017
09:32:23
Это одинаковые возможности

andretshurotshka?❄️кде
18.07.2017
09:33:31
http://www.typescriptlang.org/play/#src=declare%20function%20x()%3A%20string%0D%0Adeclare%20namespace%20x%20%7B%0D%0A%20%20export%20const%20prop%3A%20string%3B%0D%0A%7D%0D%0A%0D%0Ax.prop%0D%0Alet%20y%20%3D%20x()%0D%0A#src=type%20X%20%3D%20()%20%3D%3E%20string%20%26%20%7B%20prop%3A%20string%20%7D%3B%0D%0Adeclare%20const%20x%3A%20X%3B%0D%0A%0D%0Ax.prop%0D%0Alet%20y%20%3D%20x()%0D%0A
не работает

Artur
18.07.2017
09:33:48
Короче ладно, расскажите как вместе с классом рядом экспортить интерфейсы/типы без неймспейса

Дмитрий
18.07.2017
09:34:17
http://www.typescriptlang.org/play/index.html#src=declare%20interface%20X%20%7B%0D%0A%20%20()%3A%20string%2C%0D%0A%20%20prop%3A%20string%2C%0D%0A%7D%0D%0A%0D%0Adeclare%20var%20x%3A%20X%0D%0A%0D%0Ax.prop%0D%0Alet%20y%20%3D%20x()%0D%0A

Сергей
18.07.2017
09:34:17

andretshurotshka?❄️кде
18.07.2017
09:34:23

Дмитрий
18.07.2017
09:34:36

andretshurotshka?❄️кде
18.07.2017
09:34:37

Дмитрий
18.07.2017
09:35:01
Что?

Google

Vasiliy
18.07.2017
09:58:18
потому что внутри у меня где-то path<string>, а где-то converge(...) as any, а снаружи вот та ф-ция, которая использует все вот эти другие маленькие ф-ции (где я типы подкостыливал), она as any и вот толку тогда от этого
Ну я короче так в ts и разочаровался ?
Но вообще язык просто не предназначен для таких абстракций, тут наверное только на хаскеле типизировать
^ вот отличается ли флоу в этом плане?)

Vladimir
18.07.2017
10:01:54
В каком именно?

Vasiliy
18.07.2017
10:02:36
в плане предназначенности языка для типизации таких функциональных штук
ибо тс не вывозит в этом плане, возможно, что и флоу тоже

Дмитрий
18.07.2017
10:02:57

Сергей
18.07.2017
10:03:15
тут ZeroBias скидывал статейку про HOC в ts
годно было
так что тс вполне вывозит

Дмитрий
18.07.2017
10:04:03
Точнее, тип то выведется, вероятно получше, но в общем проблема с рамдой останется. Я стараюсь по мере возможности её решить корректными тайпингами, конечно, но всё же

Vasiliy
18.07.2017
10:04:20
так что тс вполне вывозит
спорить не буду, у меня уже от этого рак практически развился
от не возможности типизовать какие-то сложные штуки и от не выводимости типов

Vladimir
18.07.2017
10:05:02
Я чёт не понял о чем речь

Vasiliy
18.07.2017
10:05:39
об использовании рамды + ts / flow

Дмитрий
18.07.2017
10:06:18

Vladimir
18.07.2017
10:07:25
А, ну это может быть. Можно написать такое, что и в хаскелле невыразимо

Vasiliy
18.07.2017
10:09:23
ну я не от хорошей жизни рамду хочу использовать)

Google

Vladimir
18.07.2017
10:10:16
А почему? Кто-то заставляет?

Дмитрий
18.07.2017
10:10:38
Либо код в проекте не оч
Тогда хелперы рамды прям на ура заходят

Vasiliy
18.07.2017
10:13:08

Vladimir
18.07.2017
10:13:56
Писать код?

Vasiliy
18.07.2017
10:14:32
т.е велосипеды свои?) не понимаю
просто нехватает каких-то элементарных вещей, функций

Vladimir
18.07.2017
10:15:36
Например?

Vasiliy
18.07.2017
10:16:26
ну вот все то, что есть в рамде, большинство из этого мастхев

Дмитрий
18.07.2017
10:17:11
а что использовать вместо?
Условно — вместо того, чтобы делать pluck, должна быть структура, для которой не нужно делать pluck и можно обойтись хорошо типизированными функциями рамды и жс

Vladimir
18.07.2017
10:17:47

Дмитрий
18.07.2017
10:17:55
Хорошо типизированные — это те, которые не меняют структуру типа и не путешествуют по его дереву

Vasiliy
18.07.2017
10:38:22
понятно, спасибо

Artur
18.07.2017
13:22:27
Коллеги, вопрос, есть реальная необходимость такого поведения или это бага TS?
export type Foo = {
x: number;
}
export class A<T extends Foo> {
public m: T;
constructor() {
this.m = {x: 1};
}
}
Error:(89, 9) TS2322:Type '{ x: number; }' is not assignable to type 'T'.
При этом при передаче в качестве аргумента все ок
export type Foo = {
x: number;
}
export class A<T extends Foo> {
public m: T;
constructor(m: T) {
this.m = m;
}
}
new A({x: 1})

Max
18.07.2017
13:23:26
у меня вроде такое работало

Sergey
18.07.2017
13:25:49
хз, по моему логично, ты пытаешься в неизвестный заранее тип, но при этом конкретный в реализации, запихнуть литерал объекта, который не факт что соответстует этому типу
ну а во втором случае ты указываешь что тот же тип надо передавать в конструктор

Дмитрий
18.07.2017
13:26:43
Ээм а по мне выглядит как бага

Artur
18.07.2017
13:26:47
Ну и в итоге один и тот же литерал передаю

Google

Andrew
18.07.2017
13:26:50

Artur
18.07.2017
13:27:13
@Sirian обсудим?)

Дмитрий
18.07.2017
13:27:26
Это не "не известный заранее тип", это дженерик с нижней границей в { x: number }

Sergey
18.07.2017
13:27:28
ну типа неизвестно, что T будет {x: number}

Дмитрий
18.07.2017
13:27:41
Ты же это декларировал?

Sergey
18.07.2017
13:27:42
с чего бы ему думать что это правильно

Andrew
18.07.2017
13:27:53

Дмитрий
18.07.2017
13:27:53
Другое дело, что это структурное соответствие, и тс в него не может

Sergey
18.07.2017
13:27:56
это ж дженерик, он может чем угодно быть

Admin
ERROR: S client not available

Artur
18.07.2017
13:27:56
Тогда объясните, чем декларация локальный переменной от декларации аргумента отличается

Дмитрий
18.07.2017
13:28:13

Sergey
18.07.2017
13:28:34
а, все, я чет не обратил внимания на extend

Artur
18.07.2017
13:28:36

Andrew
18.07.2017
13:29:42

Дмитрий
18.07.2017
13:29:49
Нет

Artur
18.07.2017
13:30:14
let m: Foo = {x: 1}; так все нормально.

Дмитрий
18.07.2017
13:30:42
Ну это ты явно привязываешь тип

Google

Sergey
18.07.2017
13:31:48
он говорит и Foo not assignable to T в таком случае
как то так

Andrew
18.07.2017
13:31:56
Type compatibility in TypeScript is based on structural subtyping. Structural typing is a way of relating types based solely on their members. This is in contrast with nominal typing.

Дмитрий
18.07.2017
13:32:33
Либо мы что-то не так решили, либо всё же не до конца структурное

Sergey
18.07.2017
13:33:27
блэ вот ща совсем непонятно стало
export type Foo = {
x: number;
}
export class A<Foo> {
public m: Foo = {x:1};
говорит {x:number} нельзя присвоить Foo

Andrew
18.07.2017
13:34:00
Возможно там бага. Но в TS вполне себе структурное
А если заменить type на interface?

Sergey
18.07.2017
13:34:16
то же самое

Andrew
18.07.2017
13:34:21
Стоп!
class A<Foo>
это уже не тот же самый Foo

Дмитрий
18.07.2017
13:34:41
Кстати да

Sergey
18.07.2017
13:34:50
оп, точн
вполглаза с работой не получается))

Artur
18.07.2017
13:38:58
https://basarat.gitbooks.io/typescript/content/docs/tips/nominalTyping.html

Andrew
18.07.2017
13:41:45
Ну это примеры того, как заставить TS использовать номинальную типизацию вместо структурной, если очень нужно
Но на причину того, почему не работает исходник, свет пока не пролился

Дмитрий
18.07.2017
13:42:24
Ну он по ходу просто тип не вывел