
Nikita
06.10.2016
13:58:12
export type OpenModalAction<State> = {
type: 'MODAL_OPEN',
payload: {
name: string,
state: State
}
};
const action: OpenModalAction<void> = {
type: 'MODAL_OPEN',
payload: {
name: 'foo',
state: undefined
}
}
как этого избежать?
в смысле не писать state:undefined?

Oleksandr
06.10.2016
13:59:51
state?: State

Google

Nikita
06.10.2016
14:01:12
не, он должен быть.. в общем понял, у меня все равно это экшн делать будет

Vladimir
06.10.2016
14:05:45
Это уже к js вопросы

Nikita
06.10.2016
14:09:58
а js тут при чем?)

Oleksandr
06.10.2016
14:10:36
к рантайм семантике

Nikita
06.10.2016
14:11:50
эм) есть система типов, она предполагает void. в js void === undefined. а отсутствующий проперти равен проперти с undefined значением

Vladimir
06.10.2016
14:13:46
> @gusnkt
отсутствующий проперти равен проперти с undefined значением
не равен
только результат чтения одинаковый

Nikita
06.10.2016
14:14:31
❯ node
> var foo = {bar: undefined}
undefined
> foo.bar === foo.baz
true

Vladimir
06.10.2016
14:17:14
ну и
Для рантайма все равно есть разница

Aleh
06.10.2016
14:26:40
Да, hasOwnProperty
И все такое

Ҫѐҏӗѫӑ
06.10.2016
15:20:27
in

Google

Vadim
06.10.2016
18:09:21
Народ, юзал ли кто параметр "paths" в tsconfig?
Я его использую с "baseUrl", равным "." но модули не подгружаются. Выскакивает ошибка про "Cannot resolve module ..."
Что нужно делать, что б модули подгружались?

Dreamerinnoise
06.10.2016
18:18:22
Мы используем, но нам понадобилось в вебпаке указать резолвинг модулей.

Vadim
06.10.2016
18:32:29
Все исправил, но не пашет :(
Вот что прописано в tsconfig:
{
"compilerOptions": {
"baseUrl": ".",
"outDir": "./public/js",
"noImplicitAny": true,
"noImplicitReturns": true,
"moduleResolution": "classic",
"module": "commonjs",
"target": "es5",
"jsx": "react",
"sourceMap": true,
"paths": {
"common/*": [
"src/common/*"
],
"reusable/*": [
"src/components/reusable/*"
]
}
},
"exclude": [
"node_modules"
]
}
А вот что в вебпак конфиге:
resolve: {
modulesDirectories: [
'node_modules',
'src/common/',
'src/components/reusable/'
],
extensions: ['', '.js', '.ts', '.tsx']
},
Импортирую в файле так:
import { post } from 'common/utils/observable';
И получаю ругань про Cannot resolve module
Что я делаю не так?

Dreamerinnoise
06.10.2016
18:38:25
"baseUrl": "../", // tsconfig не в корне
"paths": {
"*": [
"app/*",
...
]
}
resolve: {
extensions: ['.ts', '.js'],
modules: [path.resolve("./app"), "node_modules"]
},

Vadim
06.10.2016
18:39:03
tsconfig в корне
у нас
Сейчас попробую внести правки
Все-равно не пашет :(
Теперь выглядит так:
"paths": {
"common/*": [
"src/common/*"
],
"reusable/*": [
"src/components/reusable/*"
]
}
и
resolve: {
modulesDirectories: [
'node_modules',
path.resolve('./src/common/'),
path.resolve('./src/components/reusable/')
],
extensions: ['', '.js', '.ts', '.tsx']
},
Как и прежде, при импорте таким образом:
import { post } from 'common/utils/observable';
Компилятор выдает ругань:
ERROR in ./src/common/bunches/form-validation.ts
Module not found: Error: Cannot resolve module 'common/utils/observable' in /Users/user/work/project/src/common/bunches
@ ./src/common/bunches/form-validation.ts 17:19-53
В общем, буду рад любому кто разбирается как включить параметр "paths"

Alexander
06.10.2016
19:14:26
Вот тут в комментариях вроде много вариантов решения http://stackoverflow.com/questions/27502608/resolving-require-paths-with-webpack, самым верным мне кажется вариант с alias

Vadim
06.10.2016
19:20:28
resolve: {
root: [
path.resolve('./src/common'),
path.resolve('./src/components/reusable')
],
modulesDirectories: [
'node_modules'
],
extensions: ['', '.js', '.ts', '.tsx']
},

Alexander
06.10.2016
19:33:44
Невнимательно читал, извиняюсь

Google

Ave
06.10.2016
20:51:59
parentId: ?number,
parentId?: number,
отличается же да?

Alexander
06.10.2016
22:02:19

Ave
06.10.2016
22:02:29

Alexander
06.10.2016
22:25:14
То чувство, когда снова залип на полчаса над статьей https://en.wikipedia.org/wiki/Covariance_and_contravariance_(computer_science)
И каждый раз — как первый.

Ҫѐҏӗѫӑ
06.10.2016
22:37:10
история о том, как Flow в реакте апали с 0.32 на 0.33
https://github.com/facebook/react/pull/7841/files
-// $FlowFixMe https://github.com/facebook/flow/issues/2345
+// $FlowFixMe(>=0.33.0)

Ave
06.10.2016
22:42:04
:D

Ҫѐҏӗѫӑ
06.10.2016
22:48:48
подброшу и из тс пичали
(new MyClass()).constructor как вы думаете во что инферренснется?
в блядский Function(

Дмитрий
06.10.2016
22:52:08

Ҫѐҏӗѫӑ
06.10.2016
22:52:37
в любом по идее
в каком бы то ни было режиме можно вывести, что это typeof MyClass

Дмитрий
06.10.2016
23:01:09

Ҫѐҏӗѫӑ
06.10.2016
23:01:36
в typeof MyClass
который уже, чем Function очевидно
не понял при чем тут node
и?

Дмитрий
06.10.2016
23:06:03
Ну ts же должен быть с этим поведением совместим? Что он кроме function может вернуть и как к этому отнесется другой js код?)

Google

Ҫѐҏӗѫӑ
06.10.2016
23:06:44
constructor — это не ссылка на класс
но у него такой же интерфейс
хз кстати что flow об этом думает

Vladimir
06.10.2016
23:08:17
да какая разница

Admin
ERROR: S client not available

Vladimir
06.10.2016
23:08:25
constructor не нужен

Ҫѐҏӗѫӑ
06.10.2016
23:08:44
так-то да, но это несовершенство type inferrence

Vladimir
06.10.2016
23:09:09
как по мне так лучше бы он просто его не видел и не давал трогать

Ҫѐҏӗѫӑ
06.10.2016
23:09:47
)
бывает 3rd party код. у тебя его нет, но вообще он бывает

Vladimir
06.10.2016
23:10:41
ну его в идеале не надо тайпчекать

Ҫѐҏӗѫӑ
06.10.2016
23:11:19
его надо. иначе хз чего он там вернет
в идеале его типизировали те чуваки, что код писали

Vladimir
06.10.2016
23:11:49
ну да

Alexander
06.10.2016
23:19:19
с 3rd party надо robustness principle придерживаться все-таки
дефинишны разве что для удобного автокомплита нужны

Mike
07.10.2016
11:58:44
Когда тайпскрипт генерит код(я таргечусь в es3) можно ли его заставить записывать именованные функции в прототип, когда он класс генерит(методы в частности). Например ListIterator.prototype.next = function () {... тут сама функция безымянная

Ҫѐҏӗѫӑ
07.10.2016
11:59:44
неа, но есть такая ишью вроде
подписываюсь, это говно
трейсы нужны

Google

Mike
07.10.2016
12:00:35
в свежих браузерах всё ок, но ie8... и не спрашивайте почему я его саппорчу
может регуляркой бабахнуть по коду
там вроде несложно

Andrey
07.10.2016
12:01:44
а в каких еще браузерах функции не берут название в name? Это добавили в последнии стандарты, но как давно стали поддерживать браузеры)

Mike
07.10.2016
12:01:53
ie8

Andrey
07.10.2016
12:02:07
а в ie10 смотрел?

Mike
07.10.2016
12:02:22
в 10 хз, в 11 ок. но мне надо саппортить 8

Ҫѐҏӗѫӑ
07.10.2016
12:14:41
ужс

Mike
07.10.2016
12:29:13
за такое наверно убивать надо? http://service.crazypanda.ru/v/clip2net/u/M/e690oHx4ZN.png
однако работает

Ҫѐҏӗѫӑ
07.10.2016
12:33:25
все равно для es3 таргета оно должно само имхо
если найдешь ишью, то скинь сюда плз

Mike
07.10.2016
12:34:18
я не факт что сейчас искать буду
уж очень хочется сегодня дововырять стектрейсы в ie8

Nikita
07.10.2016
13:18:34
а почему не TS -> babel -> es3?