@typescript_ru

Страница 288 из 669
Дмитрий
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: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
типа не писать в pointfree? т.е. те же самые практики, что и тс или какие-то другие?
Нет, тс такое не форсит, а зря кстати Просто сдерживается уровень абстракции не позволяя городить фабрики фабрик фабрик https://flow.org/en/docs/lang/refinements/ И предыдущие две статьи

Сергей
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 и можно обойтись хорошо типизированными функциями рамды и жс

Дмитрий
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
с чего бы ему думать что это правильно

Дмитрий
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
Тогда объясните, чем декларация локальный переменной от декларации аргумента отличается

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

Artur
18.07.2017
13:28:36
В flow с таким проблем нет
Это хорошо, но хотелось бы найти ссылку на описание подобного поведения

а, все, я чет не обратил внимания на extend
Кстати, да, возможно. Только пока не могу формализовать причину. Но вроде выглядит логичным, что литерал должен быть унаследован от {x: number}, а не является им.

Andrew
18.07.2017
13:29:42
Другое дело, что это структурное соответствие, и тс в него не может
вроде TS как раз именно в структурное и может, разве нет?

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

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

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

вроде TS как раз именно в структурное и может, разве нет?
Тс изначально только в номинальное умел. Сейчас вероятно ситуация может быть получше, но как видно, не до конца

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
Ну он по ходу просто тип не вывел

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