@typescript_ru

Страница 92 из 669
Vladimir
12.10.2016
17:19:18
Обчные API в JS либах бессмысленно неудобные

Nikita
12.10.2016
17:20:08
это правильно
вот прям не согласен) lodash, bluebird отточены уже давным давно, смысл брать их TS/Flow аналоги, если тайпинги есть?

Vladimir
12.10.2016
17:20:31
ну, есть исключения

Vlad
12.10.2016
17:20:51
https://www.typescriptlang.org/play/#src=new%20Promise%3Cstring%3E(resolve%20%3D%3E%20resolve(100500))%3B ?
Не увидел коммент. Нет, это не решение, нет гарантий, что на вызывающей стороне не будут резолвить этот промис с тем типом, что надо.

Google
Vladimir
12.10.2016
17:21:00
Очень часто делается куча вариантов аргументов просто ради красоты

Nikita
12.10.2016
17:21:21
function foo(): Promise<string> { return new Promise((resolve: (value: string) => void) => { value(123) }); }

убого, но ты связался с типами в JS и с TS. Страдай)

Vladimir
12.10.2016
17:23:29
нет

особо вроде не надо

Nikita
12.10.2016
17:24:23
ок, а если бы юзал, свои тайпинги по мере необходимости - норм вариант?)

Vladimir
12.10.2016
17:24:59
ну да

свои тайпинг, в которых только то, что нужно, так как нужно

одним способом

Vlad
12.10.2016
17:36:35
function foo(): Promise<string> { return new Promise((resolve: (value: string) => void) => { value(123) }); }
так это не отличается от того, что предложил @chicoxyzzy

Google
Vlad
12.10.2016
17:42:39
в то же время flow хорошо обрабатывает эту ситуацию

кстати, всё еще надо делать? import * as React from 'react';

Fedor
12.10.2016
17:48:21
вроде как --allowSyntheticDefaultImports решает

https://www.typescriptlang.org/docs/handbook/compiler-options.html

надо проверить)

Vlad
12.10.2016
18:35:41
--allowSyntheticDefaultImports Allow default imports from modules with no default export. This does not affect code emit, just typechecking.
@fkuril эта опция не влияет на аутпут. В то же время ts не добавляет интероп для опредления формата модуля – commonjs или es6, как это делает бабель. а раз у тск нет интеропа, а у ректа нет дефолтного экспорта, import React from 'react' не должен работать

Fedor
12.10.2016
18:40:16
Короче вебпак не прав))

Vlad
12.10.2016
18:41:15
добро пожаловать в ченжлоги тогда
а можно носом тыкнуть в эти самые чейнджлоги? потому что в тех, что в репозитории (https://github.com/Microsoft/TypeScript/wiki/What's-new-in-TypeScript) об этом ничего не нашел, в ишьюсах до сих пор спрашивают об этой проблеме, а о задаче такой нашёл только это https://github.com/Microsoft/TypeScript/issues/9562

Короче вебпак не прав))
это не вебпак, это бабель

по идее, можно поставить target в es6 и "дотранспливать" бабелем.

Ҫѐҏӗѫӑ
12.10.2016
18:56:40
это проблема тайпингов реакта, выше говорили же

с импортами все норм

Vlad
12.10.2016
19:06:18
с импортами все норм
проблема тайпингов реакта как раз и решается опцией "--allowSyntheticDefaultImports"

Aleh
12.10.2016
19:07:46
ну да, скорее проблема es2015 import и commonjs

Vlad
12.10.2016
19:09:29
с импортами все норм
ну да, норм, я бы сказал даже это "правильное" поведение

вот только бабель вкрутил интероп (по сути костыль), понимая проблемы пользователей, а тс – нет

Aleh
12.10.2016
19:12:04
ну, бабель выдумали костыль и если бы параллельно тс выдумали бы костыль, то получилось бы два конкурирующих подхода

Vlad
12.10.2016
19:12:14
и в ущерб этому правильному поведению, нормально в 2016 мы можем использовать ТС лишь как плагин к бабелю

Aleh
12.10.2016
19:12:16
да и сам бабель свой интероп ж ломал

Google
Vlad
12.10.2016
19:13:57
да и сам бабель свой интероп ж ломал
угу, но от этого не было так много страданий

Aleh
12.10.2016
19:14:14
ну да, просто не обновлялись)

Vlad
12.10.2016
19:14:27
:)

Aleh
12.10.2016
19:14:57
так а зачем вообще * as A вам в реальных задачах?

Vlad
12.10.2016
19:16:09
так а зачем вообще * as A вам в реальных задачах?
вот именно, незачем писать import * as React from 'react';

Aleh
12.10.2016
19:16:20
ну да

import { Component } from "react";

Vlad
12.10.2016
19:18:47
import { Component } from "react";
а вместо JSX использовать createElement?

вообще вариант, лишь бы не import * as React from 'react';

Nikita
12.10.2016
19:19:45
а в чем проблема TS использовать тот же костыль что и babel?)

Vlad
12.10.2016
19:20:22
а в чем проблема TS использовать тот же костыль что и babel?)
угу, это решило бы проблемы многих людей

Aleh
12.10.2016
19:20:28
а вместо JSX использовать createElement?
заэкспоузить реакт на весь проект

Aleh
12.10.2016
19:20:42
ну или еще как угодно подсовывать в *sx

Vlad
12.10.2016
19:21:20
ну или еще как угодно подсовывать в *sx
интересное решение, подумаю об этом

Aleh
12.10.2016
19:21:57
мы экспоузим и не паримся

несколько версий реакта на одной странице не встречается

Vlad
12.10.2016
19:24:39
Aleh
12.10.2016
19:25:10
{ test: require.resolve("react"), loader: "expose?React" },

Vlad
12.10.2016
19:28:41
{ test: require.resolve("react"), loader: "expose?React" },
таааак. а вот с этим как быть?

Aleh
12.10.2016
19:29:06
declare const React где-нибудь в ваших файлах деклараций

Google
Vlad
12.10.2016
19:31:23
declare const React где-нибудь в ваших файлах деклараций
точно! я переживал по поводу того, что подставится перед .createElement – React, не знал этого.

крутое решение

Admin
ERROR: S client not available

Vlad
12.10.2016
19:32:17
проблемы созданной технологией, призванной решать проблемы других технологий

Aleh
12.10.2016
19:32:49
у бабеля собстно проблема с * as blabla

Aleh
12.10.2016
19:37:11
module.exports = function() {}

Vlad
12.10.2016
19:37:18
точно! я переживал по поводу того, что подставится перед .createElement – React, не знал этого.
ну да... так ведь и бабель с реакт пресетом делает то же самое, просто даже не задумывался, о том, что ТАК можно, когда в скоупе модуля нет React

Nikita
12.10.2016
19:38:17
module.exports = function() {}
и в чем проблема?

Aleh
12.10.2016
19:38:57
ну, если заимпортить ее через import * as f from ""; то она потеряется и сделать f() нельзя будет

Nikita
12.10.2016
19:39:23
ага, тк это дефолтный экспорт в commonjs

Aleh
12.10.2016
19:39:37
нет конечно

Nikita
12.10.2016
19:39:55
export default function() {}

тоже не получишь функцию при import * as f

Aleh
12.10.2016
19:41:14
ну только это не дефолтный экспорт в commonjs

Nikita
12.10.2016
19:41:31
он и есть

exports.foo = function() {} - именованный

Aleh
12.10.2016
19:41:49
в es2015 export default это экспорт чего-то под именем дефолт

Nikita
12.10.2016
19:42:49
нет. это дефолтный экспорт, ты же default не получаешь при import * as foo?)

Google
Nikita
12.10.2016
19:44:19
сделали бы флаг babelCompat и упростили всем жизнь. но нет)

Aleh
12.10.2016
19:44:42
Nikita
12.10.2016
19:45:07
потому что у модуля есть дефолтный экспорт и есть именованные

имя не может быть default

также как switch-case. есть все случаи, а есть дефолтный случай

Aleh
12.10.2016
19:47:50
имя не может быть default
ну, может быть задано только ключевым словом

но имя у него все равно есть, оно дефолт

ну да, но имя у него все равно вполне конкретное

Vlad
12.10.2016
19:56:17
в данном случае, речь идет о синтаксисе import DEFAULT, { NAMED} from 'MODULE'

а не о том, что они отдельно "хранятся"

вот тут описано, почему дефолта нет в экспортируемых именах

If SameValue(n, "default") is false, then

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