TypeScript part2 at TECH
[2ch|▼Menu]
[前50を表示]
600:デフォルトの名無しさん
17/04/01 22:04:14.42 es45r1Ne.net
>>574
すいません。自己解決しました。
JSのモジュールまじしんどい

601:デフォルトの名無しさん
17/04/09 14:34:29.06 ZBMiMXkM.net
>>41
partial classは不採用になったので一応
Suggestion Backlog Slog, 4/3/2017
URLリンク(github.com)
URLリンク(github.com)

602:デフォルトの名無しさん
17/04/10 14:18:00.18 BK5DCjs2.net
G


603:oogle社内の標準言語としてTypeScriptが承認される。ng-conf 2017 http://www.publickey1.jp/blog/17/googletypescriptng-conf_2017.html



604:デフォルトの名無しさん
17/04/10 18:26:24.79 VEGABUso.net
>>577
Dartどうすんだよ

605:デフォルトの名無しさん
17/04/10 20:28:20.75 kMiVc4KU.net
劣るうえ、使われてないdartは自動消滅。
ホントはわかってたこと。

606:デフォルトの名無しさん
17/04/11 02:02:21.52 Kcnbnd8w.net
typescriptでreduxの実装書くのしんどいね
URLリンク(qiita.com)
こいつを参考に書いてるけど。他にいい書き方があれば

607:デフォルトの名無しさん
17/04/11 07:02:04.43 OeT6CnRN.net
>>580
おまおれ
mapStateToPropsとかの引数も型どうしていいか分からん

608:デフォルトの名無しさん
17/04/11 17:04:01.31 ejHOB/DU.net
>>580
こんなの誰が何に使うの?

609:デフォルトの名無しさん
17/04/11 19:22:39.80 +8we66Ry.net
ほんそれ

610:デフォルトの名無しさん
17/04/11 22:09:52.06 rpuwd/d9.net
TypeScriptでreact-router-reduxに手を出したら大変な目に遭った。

611:デフォルトの名無しさん
17/04/11 22:24:37.23 YJpuA+WP.net
単語が3つ以上入ってるパッケージに近寄りたくない

612:デフォルトの名無しさん
17/04/12 19:01:00.44 BxTB0mZM.net
>>577,578
もうjavaやめてtypescriptでandroidアプリ開発できるようにしてほしい。
でも本心はdart頑張れ。

613:デフォルトの名無しさん
17/04/12 19:19:27.95 usx2Dq45.net
そういうフレームワーク色々あるやん

614:デフォルトの名無しさん
17/04/12 20:26:06.76 IsZRv2xh.net
>>580
これの2.0/2.1用ってのをやってみたら#defineが欲しくなった。
ストリングリテラルを置き換えられるマクロみたいなものってないのかな?

615:デフォルトの名無しさん
17/04/12 20:47:03.00 usx2Dq45.net
>>588
何が欲しいのかよく解らんが
const ABC=”str”
じゃあかんのか?

616:デフォルトの名無しさん
17/04/12 20:56:38.51 IsZRv2xh.net
そのABCはストリングリテラル型には使えんわけよ。

617:デフォルトの名無しさん
17/04/12 21:04:32.60 WRJ4LE6o.net
redux の冗長な書き方をtypescriptの機能でなんとかしてほしいってことなんだろうけど。
react見たくpropsをinterface定義すれば大体いい感じで使える。みたいにredux の方もstateのinterface定義だけでいい感じに出来上がるような仕組みがほしい。

618:デフォルトの名無しさん
17/04/12 21:05:36.55 WRJ4LE6o.net
>>586
つreact native

619:デフォルトの名無しさん
17/04/12 22:41:00.77 mYXXp/Z3.net
>>590
const ABC:"str" = "str";
こういうことか

620:デフォルトの名無しさん
17/04/12 23:07:35.91 IsZRv2xh.net
それ。
strが短いならそのまま書いても一緒だけど、actionのtypeって長くなりがちだから
二重に書くのがつらい。

621:デフォルトの名無しさん
17/04/12 23:08:47.06 0/0fFwi6.net
>>578
TypeScriptが標準言語になっても、Dartのことは忘れてませんよとGoogle担当者がフォロー
URLリンク(www.publickey1.jp)

622:デフォルトの名無しさん
17/04/12 23:50:07.42 29ufoOq3.net
constは型書かなくてもストリングリテラルに推論されるようになったんだが存知ない?

623:デフォルトの名無しさん
17/04/13 00:12:31.67 IFJ42qsr.net
2.1からだね。2.0でも使ってたんだろうか

624:デフォルトの名無しさん
17/04/13 00:19:44.83 rVYtPk7E.net
ストリングリテラルに推論されるって?
これ通らないでしょ?
const STR = "str";
const ABC: STR = STR;

625:デフォルトの名無しさん
17/04/13 00:27:33.33 IFJ42qsr.net
>>598
そりゃ二行目がストリングリテラルじゃないからね

626:デフォルトの名無しさん
17/04/13 00:33:01.65 rVYtPk7E.net
だからそれが書けないから>>594だってことだろ。
結局>>596は何の話をしてたんだ?

627:デフォルトの名無しさん
17/04/13 00:34:18.77 IFJ42qsr.net
なにがやりたいのかよく解らんが
const STR = "str";
const ABC1 = STR;
const ABC2:”str” = ABC1;
type STRT=”str”;
const ABC3:STRT=STR;
全部通るよ

628:デフォルトの名無しさん
17/04/13 00:39:19.82 7ydi5nIB.net
>>600
エラーメッセージも読めない奴がずいぶんと偉そうだな
ドキュメント100回読み直してこい

629:デフォルトの名無しさん
17/04/13 00:40:44.33 rVYtPk7E.net
>>601
やりたいのはそこで言うSTRTとSTRの共通化。
要は同じ"str"を重複して書きたくないってこと。

630:デフォルトの名無しさん
17/04/13 00:44:07.45 7ydi5nIB.net
変数の型の参照なんて初歩の初歩なんだが教えてやるまい

631:デフォルトの名無しさん
17/04/13 01:00:49.62 IFJ42qsr.net
>>603
えっ 普通推論させるから書かないでしょ
わざわざ書かなきゃならなくなるケースってどんな時よ

632:デフォルトの名無しさん
17/04/13 01:13:36.05 rVYtPk7E.net
const STR = "str";
type STRT = "str";
const ABC3: STRT=STR;
"str"を2回書かずにABC3が作れればそれでいいんだけど。

633:デフォルトの名無しさん
17/04/13 01:20:51.05 IFJ42qsr.net
>>606
const STR = "str";
const ABC3 = STR;

634:デフォルトの名無しさん
17/04/13 06:09:08.50 32cPtkAw.net
type STRT = typeof STR

635:デフォルトの名無しさん
17/04/13 08:01:19.65 rVYtPk7E.net
すまん、確かに思い違いしていたようだ。ありがとう。

636:デフォルトの名無しさん
17/04/13 13:00:24.68 XE18llYI.net
恥ずかしか

637:デフォルトの名無しさん
17/04/13 20:33:25.78 IFJ42qsr.net
認めて謝って感謝してるだけ立派だよ

638:デフォルトの名無しさん
17/04/16 20:56:40.61 nOhMz2bP.net
TypeScriptでExpressを使う場合について教えてください。
express-generatorなどのサンプルコードだと new Error したオブジェクトにstatusを
突っ込んで返していたりしますが、ここ、TypeScript的にはどうするのが普通でしょう?
みなさん自前でErrorのサブクラスを定義しているんでしょうか?あるいはどこかに
定番のものがあったりするんでしょうか?

639:デフォルトの名無しさん
17/04/16 22:51:14.41 SqhlDt4o.net
「どうでもいい」が普通じゃない?
そんなもんエラーハンドラで受けて適当にトレースとエラーメッセージ出したら終わりなんだから
型なんぞ要らん
手段と目的を履き違えるな

640:デフォルトの名無しさん
17/04/16 23:30:20.32 R4TJTEcK.net
>>612
jsonとして扱えるようにインターフェース定義にしておいたほうが無難な気がする。
シリアライズしても簡単にもとに戻せるし。

641:デフォルトの名無しさん
17/04/17 00:09:50.93 CyuLkfZA.net
そういうもんですかね?
エラーを表示するだけとは言ってもstatusは正しくセットしなきゃならないわけで、
TypeScriptを使う以上そこも型安全にやりたいってのは自然だと思うんですが。
そこだけtslintの警告をネグるのも気持ち悪いし。

642:デフォルトの名無しさん
17/04/17 00:24:52.52 GVmJ+xSa.net
アプリケーションの仕様としてエラー用のクラスを定義します。Errorのサブクラスだったり新規に自前のクラスを用意するかはケースバイケース。
当然途中で変わることもあり得ます。その際はきちんと他のメンバーと情報共有します。

643:デフォルトの名無しさん
17/04/17 07:32:40.57 k0Nquy2H.net
自分は簡単なアプリではHttpErrorみたいなクラスを定義して使ってる。
もっと複雑なアプリだと、業務エラーのコードとHTTPのエラーコードで
もう一階層作ったりもするけど。
だが、これが推奨なやり方なのかは分からん。俺も知りたい。

644:デフォルトの名無しさん
17/04/17 08:40:01.39 CyuLkfZA.net
ありがとうございます。
statusというプロパティにステータスを返すのは決まっているんだからどこかに
出来合いのものがあるかと思ったんですが、やっぱり自前なんですね。

645:デフォルトの名無しさん
17/04/20 11:26:28.02 T7Zz78Cb.net
npm linkを駆使してtypescriptでビジネスロジックを外部モジュールにしてるんだけど
tsc -wで自動コンパイルはできるんだけど
定義ファイルも同時に生成するコマンドオプションってないかな?

646:デフォルトの名無しさん
17/04/20 11:42:22.36 T7Zz78Cb.net
>>619 すんません -w -dですね。ホント申し訳ない



648:デフォルトの名無しさん
17/04/21 21:22:59.73 Uj6lwvRH.net
TypeScriptで動的なキャストみたいなことってできるんでしょうか?
// どこかで定義されたclass
class X {}
interface AX extends X {
a: string;
}
func(x: X) {
if ( xが a: string というプロパティを持っていれば ) {
// ここではxをAXとして扱いたい
}
}

649:デフォルトの名無しさん
17/04/22 00:25:56.48 NysYFg8M.net
>>621
let ax=<AX>x
でキャスト出来る。
インターフェースが存在するかどうかはチェックはされないから注意。

650:デフォルトの名無しさん
17/04/22 10:55:16.81 scznilxz.net
>>622
ありがとうございました。うまくいきました。

651:デフォルトの名無しさん
17/04/26 12:25:16.92 mOputr8e.net
f8appのコード読んでんだけど
flowって驚くほどtypeScriptと似てるね。
んでReduxのアクションな書き方が参考になる。
type ParseObject = Object;
export type Action =
{ type: 'LOADED_ABOUT', list: Array<ParseObject> }
| { type: 'LOADED_NOTIFICATIONS', list: Array<ParseObject> }
| { type: 'LOADED_MAPS', list: Array<ParseObject> }
コレ普通にtypeScriptでも使えた。
interface宣言だとこういう書き方できなけどtype宣言だとできんのね。

652:デフォルトの名無しさん
17/04/27 14:10:54.61 2oprloyo.net
いやーTypeScriptって本当にいいものですよね
恥ずかしいソース書いてもコンパイルすればそれなりの形になってますし
全ソースが1つにまとまったjsファイルを見るとカタルシスを覚えます
javascriptを扱うのに最高の言語です

653:デフォルトの名無しさん
17/04/27 16:28:37.55 a+4IBLmk.net
開発用と納品用でコードわけられるとかありがたい

654:デフォルトの名無しさん
17/04/27 17:45:10.06 /9P4GBtP.net
minifyが出来なくて悩んでおります。
Targetをes5にしてもエラーが出る。

655:デフォルトの名無しさん
17/04/28 08:31:59.89 IMlkcp1b.net
>>627
結局該当箇所っぽいところの構造を変えて解決した

case 'Text':
{
let text: Text;
/* ごちゃごちゃした処理*/
text = {
type: 'Text',
value: node.value,
cache: nodeCache
};
return text;
}
ってなってるところで
なぜがtextという変数がminifyで消えずに残っていてエラーになっていたところ

case 'Text':
{
// let text: Text; <―削除
/* ごちゃごちゃした処理*/
let text:Text = {
type: 'Text',
value: node.value,
cache: nodeCache
};
return text;
}

ってしたら治った。

656:デフォルトの名無しさん
17/04/28 09:00:40.63 IMlkcp1b.net
すいませんminifyの件ですが一番の問題は

外部ライブラリとして別にパッケージを作ってnpm linkしていたんですが
その外部ライブラリのtsconfigの設定でtargetをes2015にしていたのが原因のようです。

npm上で公開してるライブラリってes2015のものとes5のものが混ざってるんですかね?もしそうならminifyのとき問題でそう。

そろそろブラウザもes2015に対応してきたし外部ライブラリもes2015でいいんじゃないかと思いましたがまだまだes5のほうがいいんですかねー

657:デフォルトの名無しさん
17/04/28 15:19:33.29 ZmVIrkLy.net
Announcing TypeScript 2.3
URLリンク(blogs.msdn.microsoft.com)

658:デフォルトの名無しさん
17/04/28 21:52:24.09 CfPEmNk9.net
>>629
ちゃんと設定すれば、TypeScriptが変換してくれるんじゃないの?

659:デフォルトの名無しさん
17/04/29 00:20:26.49 Ix6JNrOr.net
>>631
targetをes5にしてlibに”dom”と”es2017”を設定したら
ちゃんとminifyもできつつasync await とかobject.assaignとか使えました。

typescriptの問題というよりuglify-jsの問題ってことすね。

660:デフォルトの名無しさん
17/04/29 08:40:51.51 fFSdol5k.net
>>630
ギャー!!
適用したらエラーだら


661:ッになった!!



662:デフォルトの名無しさん
17/04/29 09:01:35.78 fFSdol5k.net
アンインストールしたらVSでtsファイル開いても識別子の色分けとかインテリセンスが出てこなくなってVSぶっ壊れたわ
再インストールだなこりゃ

663:デフォルトの名無しさん
17/04/29 09:05:24.76 fFSdol5k.net
2.3アンインストール後に再度2.3インストールしてもぶっ壊れたまま
迂闊に入れないほうがいいなこれ

664:デフォルトの名無しさん
17/04/29 14:53:43.74 D/W8thCK.net
馬鹿には無理

665:デフォルトの名無しさん
17/04/30 09:24:14.29 V5NYhrdd.net
不細工ハゲが偉そうに

666:デフォルトの名無しさん
17/04/30 11:46:36.73 A3RU6CWl.net
不細工じゃねーし!

667:デフォルトの名無しさん
17/04/30 12:00:27.54 0Jw8BHIT.net
相対パスでimportしようとすると from ’../../lib/a’ と書くことが多いのですが
..を何とかしようと思いtsconfigでbaseUrlを設定したところ
from ‘lib/a’とかけるようになって素敵だったんですが
生成したjs側で同じように相対パスを使わない方法にできずjs側からimportできなくなりました。
どうすればいいんですかね

668:デフォルトの名無しさん
17/04/30 12:07:35.75 VPr4LyhY.net
deployしてみ

669:デフォルトの名無しさん
17/04/30 13:53:10.60 bwYTEyCy.net
おい、>>638に突っ込めよ!

670:デフォルトの名無しさん
17/04/30 14:18:46.56 uAfPQWLU.net
ハゲに付ける薬なし

671:デフォルトの名無しさん
17/05/01 13:56:45.49 1hc/XS6U.net
jsonのデシリアライズ等で得られた任意のオブジェクトが指定のinterfaceに適合するかどうか
簡単に判定する方法ってないでしょうか?
実行コストがかかるのはしょうがないので、npmのライブラリでもあれば助かります。

672:デフォルトの名無しさん
17/05/01 14:12:45.68 y6q+iQAV.net
実行時に型情報は取得できないので無理

673:デフォルトの名無しさん
17/05/01 14:56:45.23 dX7m944z.net
>>643
俺は各interfaceの定義にtypeを入れてる。

674:デフォルトの名無しさん
17/05/01 15:43:26.17 FD8bdV22.net
>>643
あーなるほどtypesciptのinterface要件を満たしてるかチェックするライブラリかー。
interfaceに対するメタプログラミングができる仕組みってtypescript側に用意されてんのかな

675:デフォルトの名無しさん
17/05/01 16:42:03.86 y6q+iQAV.net
ランゲージサービスから情報引っ張ってコード生成するまでやればできる

676:デフォルトの名無しさん
17/05/01 18:22:52.40 s/VndsAg.net
>>643
初心者なんで教えて欲しいんですが
どう言う状況でそう言うのが必要に
なるんですか?

677:デフォルトの名無しさん
17/05/01 22:27:57.85 1hc/XS6U.net
>>644-648
回答ありがとうございます。
外部から入手したany型のオブジェクトに対して、一度型チェックしたらTypeGuardの下で
扱えたら便利だと思ったんですが、そう単純なものはなさそうですね。
interface毎にUser-Defined Type Guard Functionてのを用意するのが今のところ
いちばんシンプルですかね。

678:デフォルトの名無しさん
17/05/01 23:04:54.13 FD8bdV22.net
>>647
interfaceをparseするの簡単にできたわ
ジェネレータは作れそう。後はObjectを チェックするコードをかければ、、、
そっちがよくわかんないな。

679:デフォルトの名無しさん
17/05/02 00:15:01.17 79+IkLPk.net
JSON限定でいいならJSON Schema生成するだけじゃね

680:デフォルトの名無しさん
17/05/05 00:50:33.95 oXL5lOIH.net
webpackでtypescript使う時にts-loaderがtypeRootsオプションを認識してくれないような。
自作の定義ファイルを読みに行ってくれない。
結局nodes_modules/@types/においたらうごくんだけど。なんだかなぁ

681:デフォルトの名無しさん
17/05/05 10:24:07.07 E/UcmmKD.net
-g

682:デフォルトの名無しさん
17/05/07 12:47:49.44 tRHTfDHo.net
redux のreducer書く時型付きじゃないと死ぬ。
素のjsでよく書ける人いるなぁ

683:デフォルトの名無しさん
17/05/10 22:53:30.65 TahTqR8d.net
>>651
これやってみようかと思ったけど、


684:class定義からschema生成するか逆にschemaから生成するか、 どっちがいいか悩ましいなぁ。



685:デフォルトの名無しさん
17/05/11 06:23:41.84 6GcWGmCe.net
JSON Schemaの方が表現力がずっと高いから、
実用的に意味があるのは後者だろうね
型だけなら全部空文字と0とfalseでもいいんだから

686:デフォルトの名無しさん
17/05/11 06:40:52.39 Uo4oHcSP.net
JSON Schemaからのdts生成は既存のツールがいくつかあるみたいだな
逆はバリデーションとしてはほぼ無意味かと

687:デフォルトの名無しさん
17/05/11 21:37:19.65 Foo76VTo.net
目的が上で書いているようにシリアライズ-デシリアライズされたオブジェクトの型の復元なら、
interface定義を自分で書いてschemaは裏方というのが自然だとは思うが。
ただ、schemaを生成する方のツールは技術的にハードルが高いせいか選択肢があまりないな。

688:デフォルトの名無しさん
17/05/15 21:27:32.04 ZdTGw5ha.net
そもそもシリアライズという発想自体がJavaScript的でないと思うけどね
データスキーマから入るのがJSでしょ

689:デフォルトの名無しさん
17/05/15 22:43:08.64 JDFIgPdx.net
シリアライズってJSONのこと言ってるわけだろ。
言語自体にサポートの無いC++などと比べてもよっぽど馴染みがあると思うが。
で、JavaScriptだとそこまででいいんだけど、TypeScriptで型まで戻すにはどうするか?って話だろ。

690:デフォルトの名無しさん
17/05/15 23:00:01.30 ZdTGw5ha.net
バリデーションとシリアライズが別系統なのは煩雑じゃない?
コードだけで全部定義するならアノテーション使うなりしてJSON Schema相当の表現力は欲しいし、
割り切って別にするならシリアライズ系の方は中途半端なバリデーションなんかいっそ無しにて
ノーチェックでいいと思うよ

691:デフォルトの名無しさん
17/05/15 23:16:34.01 JDFIgPdx.net
うん、上から目線で何か言いたいという気持ちだけは伝わった。

692:デフォルトの名無しさん
17/05/15 23:59:53.11 5dbS9yKw.net
URLリンク(stackoverflow.com)
Yesの回答にそれっぽいコードがあるが本当に動作するのか疑問。
他はSchemaを使う回答だが、よほどでないと大袈裟な気も。

693:デフォルトの名無しさん
17/05/16 00:46:18.76 6a8gh5yc.net
自分でコンパイラ拡張して実装したみたいだけどこういうの本家の更新についてけずに陳腐化するのが常だから使えない
ついでにビルドツールなどのエコシステムも使えない

694:デフォルトの名無しさん
17/05/16 07:36:06.00 MR0lnxJG.net
正攻法だとanyを受け取って目的の型のオブジェクトにして返す関数を用意することになるんだろうが、
やることは同じようなものなのにそれぞれ型ごとに個別に用意しなければならないのが煩雑だな。
よっぽど重要な型でしかやりたくない感じ。
確かにこれが、型ガードの感覚で気軽に使えるようになったら便利だと思うけど。

695:デフォルトの名無しさん
17/05/16 08:02:09.48 64KrDfHK.net
TypeScriptの思想的にもスキーマありきで型は後付けの方が自然だと思うわ

696:デフォルトの名無しさん
17/05/16 08:27:24.80 MR0lnxJG.net
その「スキーマ」が何を指しているかよくわからんな。
まさか「JSON schemaありき」って言いたいわけじゃないだろうが。

697:デフォルトの名無しさん
17/05/16 09:01:29.19 64KrDfHK.net
>>667
別に実装は何でもいいんじゃない?
先にJSONドキュメントそのものを設計しろってこと

698:デフォルトの名無しさん
17/05/16 10:11:34.64 Jgr59aIg.net
objectを先に設計してstringifyの方が一般的だと思うが。
つまりtsなら型が先。

699:デフォルトの名無しさん
17/05/16 13:21:49.91 xkpWN83w.net
jsonに対するinterface適用にわざわざスキーマ使うのはだるいな。
やはりメンバにtypeとかを事前に追加しておいて、そこを見てキャストさせるほうが楽だわ。


700:もちろんそのjson自体が自分で改変可能である必要はあるが。



701:デフォルトの名無しさん
17/05/16 13:49:23.26 6a8gh5yc.net
言語がサポートしてるのはその使い方だからな

702:デフォルトの名無しさん
17/05/16 14:24:04.58 KRJlMJox.net
TypeScript ⇔ JSONSchema を相互に変換するコードは既に転がってるから
どちらでも好みで原本にすれば良いんじゃないの?
まぁあまり自動化を頑張っても、構造が複雑になると結局手書きが必要になる分野だとは思うけど

703:デフォルトの名無しさん
17/05/16 14:48:54.41 64KrDfHK.net
型で記述しきれないバリデーションについてはDecoratorsを使うのがベストなんだろうけど、
interfaceには使えないんだよな
まあJSONだけならそれでもいいかもしれないが

704:デフォルトの名無しさん
17/05/16 15:28:34.19 6a8gh5yc.net
リリースノートも見ずにオレオレソリューションひねり出すのやめない?
URLリンク(github.com)

705:デフォルトの名無しさん
17/05/16 15:33:13.80 4P1sgrCm.net
interfaceがトランスパイル後に消滅しちゃうの辛いよな。
言語機能でいい感じに残す機能つけてほしいが、そういう提案ってないの?
最近ついたというプラグインで可能になる?

706:デフォルトの名無しさん
17/05/16 15:42:38.42 6a8gh5yc.net
>>663で公式で却下されたと書いてある
まあESの仕様壊すし残当

707:デフォルトの名無しさん
17/05/16 15:48:01.77 KRJlMJox.net
>>674
この文脈 (>>643, 648) では、型フィールドを信用するのはノーチェックと同じ意味だぞ
外部からのデータが、内部的な制約を満たすことの保証を求めてる

708:デフォルトの名無しさん
17/05/16 16:10:10.21 6a8gh5yc.net
いや関数に隠蔽すれば壊すまではいかんか

>>677
入力データの検査も値レベルの制約も手でやること
型システムに求めることじゃない
型を信じてノーチェックが型安全でありそうでなければオーバーヘッドで死ぬ
本人もタイプガードで満足してるしそれが正解

709:デフォルトの名無しさん
17/05/16 17:11:36.85 rTo/YyDO.net
>>676
まぁESの仕様+型だけだから学習コストが低いってのはあるしね。 でも直感的にinterface定義が消えちゃうのはなんだかなぁって気はする。

こうなったらES側に頑張ってもらうしかないな。パターンマッチング付けてー

710:デフォルトの名無しさん
17/05/29 18:33:36.63 DGY6L2yw.net
>>652
コレが解決した。
悩んでいつつも暫定対処で乗り切ってただけに小骨が喉に刺さっているような気分でしたわ。
結論としてはtypeRootsオプションは/// <reference types=".." />
を使う時のpath解決でしか使わないって。
ハンドブックをどう読んでもそう書いているように見えない。

711:デフォルトの名無しさん
17/06/02 03:21:08.54 0selKGQ0.net
typescriptでimmutablejs使ってるけどいまいち恩恵を得づらい。

updateInとかパスが補完効いたり出来ればいいのに

712:デフォルトの名無しさん
17/06/02 08:57:46.98 vyfZNbsR.net
thisを変数に入れたいときの変数名ってみんな何してる?
_thisが使えればいいんだけどなー

713:デフォルトの名無しさん
17/06/02 09:08:17.58 Ef+/+PyI.net
変数に入れた後のthisはthisなんですか・・・・?

714:デフォルトの名無しさん
17/06/02 09:09:32.94 lCCVb2h3.net
thatだがそもそもそんなこと必要にならない

715:デフォルトの名無しさん
17/06/02 09:20:29.61 8OnrstJc.net
JavaScriptのクロージャにおけるthis問題の回避はselfが定番
TypeScriptで必要なケースは少ないはずだけど

716:デフォルトの名無しさん
17/06/02 09:43:18.53 LceXbV2F.net
>>682
_thisはダメなの?

717:デフォルトの名無しさん
17/06/02 10:31:35.82 QxLZOlf9.net
_thisは重複エラーになっちゃうんでやすよね
目的としては、deferredを返すfunctionがあって、その返り値のdoneで呼び元のthisを使いたいんです

718:デフォルトの名無しさん
17/06/02 11:16:51.90 Ef+/+PyI.net
やりたいことが分からん
コード例plz

719:デフォルトの名無しさん
17/06/02 11:38:44.20 lCCVb2h3.net
アロー関数で済むやつでは

720:デフォルトの名無しさん
17/06/02 12:13:45.27 QxLZOlf9.net
>>688
var testFucntion = () => {

    var defer = $.Deferred();

    defer.resolve("a");

    return defer.promise();

}

 

var hoge: string;

testFucntion()

    .done(function (data: string) {

        this.hoge(data);

    })

こんな感じ

721:デフォルトの名無しさん
17/06/02 12:15:24.11 Ef+/+PyI.net
>>690
>>689

722:デフォルトの名無しさん
17/06/02 12:17:24.53 lCCVb2h3.net
草www

723:デフォルトの名無しさん
17/06/02 12:20:14.11 jbvcqQ/c.net
自演乙としか

724:デフォルトの名無しさん
17/06/02 23:52:05.01 7H2+/kur.net
functionが自然な場所は、アローにしてて、
アローで解決できる箇所はfunctionなのはなぜ。

725:デフォルトの名無しさん
17/06/03 02:14:50.79 QIr3+kxI.net
>>690
doneのほうをアロー式にしたらいいんやで
あとvsで開発してる場合、デバッグ時にウォッチしたとき、そのthisにはtestFucntionが入るけど
実際にはちゃんと使いたい値が入ってるから安心しな

726:デフォルトの名無しさん
17/06/03 09:18:06.31 bm3mvh5f.net
アロー使えばselfいらないって知った時感動した

727:デフォルトの名無しさん
17/06/04 01:06:25.77 ioiT3hTG.net
Angular(2以降)の話題もここでよろしょうございますか?

728:デフォルトの名無しさん
17/06/04 02:05:52.05 fuFkI60h.net
まったくではないが違うんじゃないか?

729:デフォルトの名無しさん
17/06/04 05:58:20.77 xlmC5HkR.net
スレリンク(php板)

730:デフォルトの名無しさん
17/06/11 19:15:01.32 AskXGu9A.net
interface A{
 x:string;
 y:string;
}
interface B extends A{
 x:number;
}
が型の互換性エラーになるの何とかならない?
let a={x:'hoge',y:'foo'};
let b={...a,{x:1}};
みたいな事は出来るのにbを現す型を簡単に定義出来ないのが辛い

731:デフォルトの名無しさん
17/06/11 19:18:40.94 AskXGu9A.net
>>697
ngxのスレは別にある

732:デフォルトの名無しさん
17/06/11 19:55:36.52 AskXGu9A.net
>>699
2以降はこっち
スレリンク(hp板)

733:デフォルトの名無しさん
17/06/11 20:29:27.66 zURolSWc.net
>>700
型が変わったら継承できないのは当たり前では?
interface Parent {
x: string | number;
y: string;
}
interface A extends Parent {
x: string;
}
interface B extends Parent {
x: number;
}
こういう関係が正しい関係では?

734:デフォルトの名無しさん
17/06/11 21:09:00.82 y28miZDE.net
理解してない奴を炙り出すのにも静的チェックは必要なんやなって

735:デフォルトの名無しさん
17/06/11 21:21:16.05 QZNztTAY.net
>>703
プロパティだとセットのときを考えるとcontravariantじゃないとダメだしゲットのときにはcovariantじゃないとダメだから結局invariantが必要になるような気がする
アクセサならsetのパラメタとgetの返却値で型が異なってもいいから問題ないと思うけど

736:デフォルトの名無しさん
17/06/11 22:09:32.03 AskXGu9A.net
>>703
継承出来ないのは当たり前って言うのは分かる
ただ上書きする構文が欲しい

737:デフォルトの名無しさん
17/06/11 22:13:08.61 QZNztTAY.net
>>706
ジェネリクスあるし上書きする構文が必要になる状況が分からん

738:デフォルトの名無しさん
17/06/11 22:22:11.45 eD+QASKK.net
上書きなんぞせずとも別の名前付ければよくね?
デメリットしか思い付かないし実装されないと思うが、仮に実装されたとしても予想される実装方法はBの型を通してアクセスしたときは型名とかをprefix付けた別名になるようにトランスパイルされるようになるだけでしょ

739:デフォルトの名無しさん
17/06/11 23:47:19.06 fVYgJSKO.net
extends Aじゃないけどその定義を流用してBを定義したいということか?

740:デフォルトの名無しさん
17/06/11 23:48:25.17 AskXGu9A.net
>>709
そういう事

741:デフォルトの名無しさん
17/06/11 23:49:49.29 AskXGu9A.net
B extends Aじゃないから当然
(hoge:B)=>{
let foo:A=hoge;
}

みたいな事は出来なくて良い(というか出来ない)

742:デフォルトの名無しさん
17/06/12 00:58:34.90 F6aJQHtJ.net
継承じゃないんだから諦めてジェネリクス使いなよ

743:デフォルトの名無しさん
17/06/12 08:01:38.24 9hAA1jJ7.net
世の中にxがstringかnumberの場合があるのなら、x: string | number という定義が正しい気がしますが

744:デフォルトの名無しさん
17/06/12 08:11:52.28 R1uj6Z8h.net
ジェネリクスだと>>700の問題がどこまで解決できるんだろう。

745:デフォルトの名無しさん
17/06/12 08:26:45.30 vVucOmau.net
>>714
interface X<T> {
 x: T;
 y: string;
}
interface A extends X<string> { }
interface B extends X<number> { }

746:デフォルトの名無しさん
17/06/12 18:05:51.91 i2S9/2aT.net
flowとtypescriptって
どっちが良いの?

747:デフォルトの名無しさん
17/06/12 18:14:08.97 /bUB16QZ.net
>>716
圧倒的TypeScript
異論は見ろめない

748:デフォルトの名無しさん
17/06/12 21:00:25.44 5UNDPLtW.net
酔うの早すぎるだろ

749:デフォルトの名無しさん
17/06/13 22:10:43.81 PMWJJsvl.net
Announcing TypeScript 2.4 RC
URLリンク(blogs.msdn.microsoft.com)

750:デフォルトの名無しさん
17/06/14 08:28:34.92 TtxDPC/b.net
enumってstring literal型出てからほぼ使わなくなったからなあ
コード内でimportできるのもよくわからん
何がよくなったんだ

751:デフォルトの名無しさん
17/06/14 09:04:40.52 t483F9YG.net
新importは関数であることに意味がある

752:デフォルトの名無しさん
17/06/14 21:28:45.57 YgZhsY+k.net
>>721
なるほど Promiseで返すってことはasync await 前提なんかな。
ちょっと非同期周りで互換性のないライブラリ使ってると途端に不便になるから
一長一短ではあるんだけど。全部がPromise使うライブラリで固められれば便利になるんかな。

753:デフォルトの名無しさん
17/06/14 21:29:54.91 YgZhsY+k.net
jsの仕様変更そろそろ収まって欲しい。
import周りってこれで安定するようになるのかな。

754:デフォルトの名無しさん
17/06/15 19:20:45.69 Zba3QY3O.net
filterの中でasync await って使えないんですかね?

755:デフォルトの名無しさん
17/06/15 19:24:11.68 xqojsLNP.net
>>724
無理
rxjs使うか設計見なおせ
具体的に何をしたい?

756:デフォルトの名無しさん
17/06/15 21:25:19.64 Zba3QY3O.net
filterの評価関数を作ろうとした時に、今まで作ったやつが全部プロミス返す設計になっていたので、
シームレスに使おうとしたらasync-awaitを使えないかなーと。
将来的にここもasync await使えるようになるのかな。
結局ループを回して絞込処理を実装しましたわ。

757:デフォルトの名無しさん
17/06/15 21:30:12.69 xqojsLNP.net
rxjs使え

758:デフォルトの名無しさん
17/06/15 21:32:03.12 xqojsLNP.net
それか自作。そんなに難しくないぞ

759:デフォルトの名無しさん
17/06/16 01:22:09.50 uNQVqIhb


760:.net



761:デフォルトの名無しさん
17/06/16 07:51:13.34 VSZ6CfqO.net
ループでawaitしちゃうってパフォーマンス悪くない?
await promise.all([].map(async () => {}))

こういうのが普通では?

762:デフォルトの名無しさん
17/06/16 12:37:39.06 uNQVqIhb.net
>>730
ずっとpromise.allの存在を失念してた。
これでmap的な使い方できるね。


ところでtypescriptのプロジェクトで自作helperライブラリを使う時にいちいちimportを使うのが面倒くさいんで
自動でimportする設定ってtsconfigにないかな?

763:デフォルトの名無しさん
17/06/17 10:56:23.79 254ieyWi.net
typescript便利だけどやっぱり型が後付の弊害がなかなかしんどい。
nullを許


764:容しない前提かと思って使っても結局 実体はnullが突っ込んであったり する。



765:デフォルトの名無しさん
17/06/17 17:32:41.06 Jhwo6DZg.net
弊害じゃなくて人為的ミス
誤りに気付いた者が正せばいい

766:デフォルトの名無しさん
17/06/17 22:27:47.68 254ieyWi.net
swaggerのジェネレーターが出すコードなんだよね。プルリク出すのが面倒です

767:デフォルトの名無しさん
17/06/18 00:50:13.20 GScuub4f.net
サーバーサイドの言語仕様とswaggerがstrict null checkに対応してないだけであって
typescriptは何も悪くないのでは

768:デフォルトの名無しさん
17/06/18 15:17:38.51 xPH4G83l.net
ほんそれ

769:デフォルトの名無しさん
17/06/18 20:34:02.75 9Ms8Oqe4.net
>>735
本体がstrict null check対応しても
モジュール側が対応してないとそこは無視するってことです?
例えばモジュールが強制的に T | undefined | null 型になるとかならいいんですけどね

770:デフォルトの名無しさん
17/06/19 00:15:28.42 2IBzsU2g.net
type Action =
{
type: “A”,
id: number
} |
{
type: “B”,
payload: any
} ….
みたいな定義がある時に
interface ALias {
[type: Action.type]: () => any;
}
export default <Alias> {
“A”: func1,
“B”: func2,
}
みたいに書けないですかね?
つまりAction.typeをinterface の条件に入れたいってことなんですが。

771:デフォルトの名無しさん
17/06/19 09:56:19.65 nrLP7Uu1.net
インデックスシグネチャがstringかnumberしか受け入れない現状では
Aliasを定義する時点でキー(Action.typeの値)が
分かってるなら interface Alias { 'A'?: Func; 'B'?: Func; }
分からないなら interface Alias { [type: string]: Func; }

772:デフォルトの名無しさん
17/06/19 20:30:47.90 8qDOjcU2.net
>>731
interface Actions {
A: {id: number};
B: {payload: any}
}


interface Arias {[key in keyof Actions]: () => Actions[key]}

こういうことかな?

773:デフォルトの名無しさん
17/06/19 21:29:43.40 GKod7M3S.net
携帯から書いたけどエラー起きてるし意図理解できてなかった。
こういうことかな?
type Action = { type: "A" } | {type: "B"};
type Arias = {[K in Action["type"]]: () => void}
URLリンク(i.imgur.com)

774:デフォルトの名無しさん
17/06/19 22:19:36.13 p+TikfUB.net
Arias(笑)

775:デフォルトの名無しさん
17/06/20 16:14:46.75 Nl8VP77v.net
>>741
おー。聞いてみて良かったです。半分諦めてたんで。
上手く動きました。ありがとうございます。

776:デフォルトの名無しさん
17/06/21 12:13:37.61 qahQSwg3.net
>>743
もっとこういう質問で賑わってほしい
書いてて気持ちいい言語だから
angularやreactは流行らなくていいけどフロント開発の標準はtypescriptになってほしい

777:デフォルトの名無しさん
17/06/21 14:47:30.10 CAzvCkNY.net
>>744
定義ファイルがなくて自作するハメになると途端に苦痛になるけどな。
あとReactというかReduxつかってて合わせてimmutable.js使ってると
いつの間にかclassがjsonに変わってることがあってその場合はtypescriptの型と合わなくなるから
しんどい。型が後付じゃない言語ならこういうことがないから、ちょっと辛い。
結局reducer内で使う時にjsonからimmuatblejsのclassに変換して
state返す時にjsonに戻す処理を毎回入れる方針になった。
immutable.jsは全然typescriptと相性が良くない。
XXX.set(‘member’, value) みたいな構文になるから。
もっとtypescriptで使いやすいimmutableなライブラリないかしら。

778:デフォルトの名無しさん
17/06/21 16:08:20.66 QjjhDd/n.net
>>745
新バージョンではXXX.setが型安全になるからもう少し待て
リテラル型とkeyofを使うらしい

779:デフォルトの名無しさん
17/06/21 19:23:40.28 CAzvCkNY.net
URLリンク(goo.gl)


780: こんな感じのコードでファイルのアップロード処理を作りたいんですが 上手く動かなくて悩んでいます。 お助け下さい



781:デフォルトの名無しさん
17/06/21 21:09:26.65 nUhsZ0ik.net
>>747
ブラウザのセキュリティ設定で、`input.click()`はfileエレメントには効かないみたいですね。
URLリンク(stackoverflow.com)

782:デフォルトの名無しさん
17/06/21 21:50:59.59 nUhsZ0ik.net
>>745
immutablejsというのは使ったことないけど、
XXX.set(‘member’, value)みたいな処理もkeyof使ってラップしてあげればkey毎に違う型のvalueに対応できる。
例えばES6のMap<K,V>クラスをラップすれば以下みたいなこともできる。
まあ新しいバージョンで対応されるならわざわざラップクラス作る必要ないがw
class TypeSafeMap...(省略

interface IObject {
name: string;
height: number;
isYes: boolean;
}

const safeMap = new TypeSafeMap<IObject>();
safeMap.get("name") // string型
safeMap.get("height") // number型
safeMap.set("name", 1) // NG
safeMap.set("name", "one") // OK

URLリンク(goo.gl)

783:デフォルトの名無しさん
17/06/21 22:49:52.97 CAzvCkNY.net
>>748
こちらは結局 イベントリスナーをcickではなくchange にすることで上手く動くようになりました。

>>749
typescriptのジェネリクスの性能いいですね。
結構知らない機能がまだありそう。

784:デフォルトの名無しさん
17/06/22 00:17:25.62 u6z6+xvR.net
>>750
それはよかったです、てっきりclickイベントをjsで発火させてファイル選択ダイアログを自動で開かせたいのか思ったw

785:デフォルトの名無しさん
17/06/22 17:18:45.24 77+4f1XL.net
>>751
そうなんですけどリスナーのイベント指定がclickではなくchnageだったってことです。
URLリンク(goo.gl)

before
i.addEventListener(‘click’, async (e) => {
after
i.addEventListener('change', async (e) => {

786:デフォルトの名無しさん
17/06/22 18:30:45.28 b2Lz7aux.net
>>752
たしかのそれもひとつの原因ですね
ですがclickイベントの発火も多分動かないのでは?chブラウザにもよると思いますがchromeで動かなかったですよ

787:デフォルトの名無しさん
17/06/22 19:47:44.81 77+4f1XL.net
>>753
動きましたよ。少なくともchromeでは。動くコードを>>752に貼ったんで

788:デフォルトの名無しさん
17/06/22 20:06:21.77 u6z6+xvR.net
>>754
>>752は手動のクリックイベントからclick発火してるので動きますね
>>747はsettimeout内でclick発火してるので、動かないです

789:デフォルトの名無しさん
17/06/24 00:04:21.44 7kzB7ca0.net
typescriptでreduxのミドルウェア書いてる人っていませんか?

export interface Middleware {
<S>(api: MiddlewareAPI<S>): (next: Dispatch<S>) => Dispatch<S>;
}

上記interfaceを満たすコードを書けなくて困ってます。サンプルコード的なのどっかにないですかね?

790:デフォルトの名無しさん
17/06/25 15:04:59.28 k1gomwYO.net
reduxってreact関係の何かなのかな?
相変わらずreactの作法は意味不明
流行らずに消えてほしい

791:デフォルトの名無しさん
17/06/25 15:18:46.73 dKXT3hQ7.net
すみません
今パッケージングというのかライブラリのシステムは何を使うのが正解何ですか?
electronやってみようと思ってタイプライブラリをいれようと思っていろいろなサイト見てやってるんですが
どれも失敗します

今の定番の方法を紹介してるサイトってありませんか?
それとも今は時期がまずいんでしょうか?

792:デフォルトの名無しさん
17/06/25 16:41:50.61 OCPIhIaN.net
npm -i @types/XXXX

793:デフォルトの名無しさん
17/06/25 17:11:28.11 k1gomwYO.net
>>758
よくわからないけどelectronのtypescript開発は少しややこしい
メインプロセス側と画面側でプロジェクト分けるのが主流で、メインプロセス側はgulpビルド、画面側はwebpackビルドみたいになって少しややこしい

794:デフォルトの名無しさん
17/06/25 19:32:19.06 o1GCb4AX.net
回答ありがとうございました

もうしばらく待ってみます

795:デフォルトの名無しさん
17/06/26 10:42:55.52 B+I0vs4D.net
>>757
はやっちゃってるんだよなぁ。
React自体は凄くTypeScriptとの親和性は高い。というかむしろ推奨しているくらい。
ただReduxはTypeScriptからどう使えばいいのかよくわからなくて

796:デフォルトの名無しさん
17/06/26 15:37:27.06 B+I0vs4D.net
>>756
自己解決したので書いておきます
ただのロガーの場合

import { Action } from 'actions';
import { State } from 'reducers';

export function myMiddleware(store: redux.MiddlewareAPI<State>):
(next: redux.Dispatch<State>) => redux.Dispatch<State> {
return (next: redux.Dispatch<State>) => (action: Action): Action => {
console.log(store.getState());
let result = next(action);
console.log(store.getState());
return result;
};
}

797:デフォルトの名無しさん
17/06/27 16:22:46.76 xkXC4vKS.net
typescriptで書かれてる有名なライブラリって何があるの?
Rx.jsはtypeScriptで書かれてたね。

798:デフォルトの名無しさん
17/06/27 16:42:32.21 mpuQzI8/.net
フレームワークだけどngx

799:デフォルトの名無しさん
17/06/27 18:35:39.52 5NUjqPYf.net
Dartどっかいったな

800:デフォルトの名無しさん
17/06/27 19:04:32.75 mpuQzI8/.net
googleが作る言語はゴミばっかだからしゃーない
言語のセンスは圧倒的にMSの方が上
MSというよりヘルスバーグが有能すぎる

801:デフォルトの名無しさん
17/06/27 22:13:14.24 xkXC4vKS.net
>>767
goはいいぞ。素朴でモダンという相反する要素を持ち合わせてる。
エコシステムはモダン。
言語仕様は素朴。

802:デフォルトの名無しさん
17/06/27 22:20:02.75 rQeMEWtY.net
J++とかJ#とかManaged C++とか割と救いようのないものも作ってるけどねMicrosoft
でも全体としては確かに良い言語が多い印象

Googleの言語もGoとか(使ったことないけど)人気みたいだし, そもそも作った言語の数が大分違う気が

803:デフォルトの名無しさん
17/06/27 23:37:36.64 mpuQzI8/.net
>>768
ジェネリクス追加されるまでは様子見…

804:デフォルトの名無しさん
17/06/28 03:33:15.38 4SuBLGV6.net
マイクロソフトはvsc出したときはなんでatomの二番煎じやってんのって思ったけどやはり製品としての完成度高くて感動する。
開発環境作らせたら最強と言う噂は伊達じゃない。

805:デフォルトの名無しさん
17/06/28 09:12:54.31 9HmGLvwZ.net
>>764
angular2

806:デフォルトの名無しさん
17/06/28 14:22:19.39 R0ZTQr0d.net
Announcing TypeScript 2.4
URLリンク(blogs.msdn.microsoft.com)

807:デフォルトの名無しさん
17/06/28 16:15:00.25 7uiFkJf0.net
MSは言語と開発環境では最強
ネットや機械学習ならGoogle
アップルは…嫌い

808:デフォルトの名無しさん
17/06/28 16:19:23.04 DxMay05+.net
MSは言語と開発環境では最強
ネットや機械学習ならGoogle
アップルは…嫌い

809:デフォルトの名無しさん
17/06/28 16:28:12.57 7uiFkJf0.net
>>775
何こいつ怖い

810:デフォルトの名無しさん
17/06/29 16:13:29.70 f9ij8X2q.net
すいません。

例えば以下のようにアクションを定義してあったとして

export type Action =
{
type: 'FETCH_MAIN_FEEDS';
} |
{
type: 'SET_MAIN_FFEDS';
payload: comm.Contentlist;
} |
{
type: 'DO_NOTHING'
};



ジェスリクスの仕組みを使って
type ActionType = 'FETCH_MAIN_FEEDS' | 'SET_MAIN_FFEDS' | 'DO_NOTHING'
をActionの内容変更に合わせて自動的に作る方法ってないですかね

811:デフォルトの名無しさん
17/06/29 16:20:59.60 f9ij8X2q.net
自己解決
export type Action =
{
type: 'FETCH_MAIN_FEEDS';
payload: undefined;
} |
{
type: 'SET_MAIN_FFEDS';
payload: comm.Contentlist;
} |
{
type: 'DO_NOTHING';
payload: undefined;
};

type ActionType = Action['type'];
type PayloadType = Action['payload'];


思いの外簡単であった

812:デフォルトの名無しさん
17/07/10 13:26:30.50 gqDySAuG.net
typescriptのエラーってよくわかんないことある

(81,32): error TS2322: Type '{ path: "/logout"; component: typeof Logout; }' is not assignable to type 'IntrinsicAttributes & IntrinsicClassAttributes<Route> & Readonly<{ children?: ReactNode; }> & Rea...'.
Type '{ path: "/logout"; component: typeof Logout; }' is not assignable to type 'Readonly<RouteProps>'.
Types of property 'component' are incompatible.
Type 'typeof Logout' is not assignable to type 'StatelessComponent<RouteComponentProps<any> | undefined> | ComponentClass<RouteComponentProps<any...'.
Type 'typeof Logout' is not assignable to type 'ComponentClass<RouteComponentProps<any> | undefined>'.

ってでて、何のことかわからない。

偶然解決して、総合するとReact.Componet<P,S>のSをvoidに指定は駄目ってことらしい。
上記エラーメッセージからどう読み取ればそういうことなわけ?

813:デフォルトの名無しさん
17/07/10 19:20:13.57 lPQJaLkK.net
template登場したての頃のc++みたいだな


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

1145日前に更新/265 KB
担当:undef