TypeScript part2 [転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
http://www.typescriptlang.org/ TypeScript lets you write JavaScript the way you really want to. TypeScript is a typed superset of JavaScript that compiles to plain JavaScript. Any browser. Any host. Any OS. Open Source. 前スレ http://peace.2ch.net/test/read.cgi/tech/1349187527/ マイクロソフトはvsc出したときはなんでatomの二番煎じやってんのって思ったけどやはり製品としての完成度高くて感動する。 開発環境作らせたら最強と言う噂は伊達じゃない。 MSは言語と開発環境では最強 ネットや機械学習ならGoogle アップルは…嫌い MSは言語と開発環境では最強 ネットや機械学習ならGoogle アップルは…嫌い すいません。 例えば以下のようにアクションを定義してあったとして 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の内容変更に合わせて自動的に作る方法ってないですかね 自己解決 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']; 思いの外簡単であった 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に指定は駄目ってことらしい。 上記エラーメッセージからどう読み取ればそういうことなわけ? @typesやパッケージ自身が持っているd.tsに問題があるとき、自分のプロジェクト内で 部分的に修正版と差し替えたりできないのかな? Typescript2.4に上げたらいくつかのパッケージがエラーを出すようになってしまったんで 大元が対応するまでの間ちょっと回避したいんだが。 リンク先のそれは解決法として正しいのかという疑問はあるがとりあえず、declareで 定義を上書きできるということかな。試してみるわ。ありがとう。 ここでredux-observale薦めてもらったのもあって試してるんだけど epicを書く時 action$.ofType('FIRST’)って書いてfilterするのはいいんだけど返ってくる Observaleがtype:’FIRST’に絞り込められてくれない。 無理やりキャストして使えってこと? いい方法教えてください VS2017は2015と違ってJavaScriptで var a = {}; a.b = 1; と書いてその下に「a.」と入力しても候補にnumber型プロパティとしてのbはない TypeScriptのnamespaceがブラウザの生JavaScriptでも使えるようになったら便利そうなんだけどな >>782 いやいや。具体的に指摘してほしいな。 reduxのactionは基本的にobjectであれば何でもあり。というスタンスのもので そのactionに継承関係を設定してるのはたまたま定義ファイルの作者がなんとなく決めた程度のものでしかない。 となると元々の定義を修正してしまっても不都合はないと思うんだが。 更にいうとreduxのmiddlewareの定義ファイルも、結構declareで大元のreudxの定義を改変してる。 (redux-thunkとかredux-promiseとか) 「具体的に」と言っている当人が具体的にに何を指摘しているのかわからない件 モジュール拡張書いてる人っていますか? ローカルではうまく書けるんだけど、 npmで管理して外部モジュール化しようとするとうまく動かなくなる。 jsとd.tsに別れるとだめなんだろうか、、、、。 なんか参考になるnpmライブラリが有るなら事に教えてくださいm(_ _)m >>787 jsとd.tsを同じ所に置けばおk angularとか参考になるよ >>788 ありがとうざいます。js とd.tsは同じ場所においてます、、、、 ちょっとangularはわからなかったのですが rxjs5はoperatorをモジュール拡張の仕組みを使っているので参考になりました。 それを元に書いてるんですが、、、 どうしてもうまくいかないです。 >>789 npm rxjsした時のフォルダ構成とビルド結果が同じようにすればおk もちろんパッケージ.jspnとかもな typescriptってユーザー数多そうなのに どこに生息してるん? teratailもあんまりいなさそうだし。slackとかかね? おせーてください typescript は google 社員御用達だぞ ここのレスも 99 割が google 社員のもの MSとgoogleのマリアージュとか最高じゃないかな。 >>791 TypeScriptはほぼJSだから他の言語と違って特に質問するような事ないし… >>794 定義ファイル周りとか結構悩むことない? 例えばreduxとかそのまま使うとTypeScriptの補完機能を活かしきれなくて typescript-fsaとかを使って補強してやると凄く調子良く動く。 https://jp.vuejs.org/v2/guide/typescript.html vuejsもtypescriptとの親和性上がってるのかな。 昔はいまいちだったんだけど typescriptでjest使ってる人っています? 行番号がめちゃくちゃになっちゃうんですが、どうすればいいんですかね? inlinesoucrmap: trueにセットしても改善せず。 行番号以外は上手く動いてるんですけどね。 es2015とかes2017はどうかな? async await使えるの幸せ。 さすが俺達のTypeScript TypeScripts Type System is Turing Complete https://github.com/Microsoft/TypeScript/issues/14833 >>799 ジェネリグスだけでプログラミングできるってこと? わけわかめ tsconfig.json で noImplicitAny をtrueにしてみたら、npmからのモジュールをimportしている部分で こういうエラーが大量に出るようになってしまった。 error TS7016: Could not find a declaration file for module 'モジュール名'. importをrequireに戻したら逆に不便だし、自分で .d.ts を用意するには数が多すぎて追いつかない。 noImplicitAny の対象を自分のコードのみに限定する(node_modules以下を対象外とする) なんてことはできないんだろうか。 >>802 俺は普通に使えてるけどな。tsconfig全体を貼ってみたら? あと使ってるライブラリも。ライブラリによって違うのかな? 俺はreduxとかreactとかmoment.jsとかimmutable.jsとか色々入れてるけど 特にそういう不具合が起きたことはないな。 多分デフォルトでtsconfigの中身はnode_modules対象外な気がする。 一応聞くけどwebpack使ってないよね? このへんのモジュールが引っ掛かった。全部じゃないけど。 react-spin cookie-parser uuid-parse >一応聞くけどwebpack使ってないよね? そう、webpack使ってる。 module: { rules: [ { exclude: /(node_modules)/, test: /\.[jt]s$/, use: [ { loader: 'ts-loader', options: { configFileName: "tsconfig.json", } } ] } ] }, tsconfig.json はこんな感じ。 { "compilerOptions": { "module": "commonjs", "target": "es6", "allowJs": true, "strictNullChecks": false, "noImplicitAny": false, "noImplicitThis": true, "noImplicitReturns": true, "sourceMap": true }, "exclude": [ "node_modules" ] } excludeの設定を間違えているのかな? なんだ、全部のd.tsが見つからないって言ってるわけじゃないなら、node_modules関係なくない? 足りないd.tsファイルは自作するしかないでしょ。インストールしたのに見つからないなら問題だけど webpackのresolveが抜けてるんじゃない? resolve: { extensions: ['.ts', '.tsx', '.js', '.jsx'], modules: [ "node_modules/" ] }, >react-spin あとreact-spinは型定義にないみたいね。でもこれくらいなら五分で自作できるから大丈夫。 >>806 noImplicitAny = false なら .d.ts が無くても使えていたんで何か方法はないかと思ったけど、 無いならしょうがないね。ありがとう。 最初に書いたとおり、単に数が多いからやってられんてだけ。 >>811 あーなるほど失礼 もともとjs案件だったってこと? (new Error()).stack みたく 実行箇所のtsファイル名と行番号を取得する方法ってないですかね。 プリプロセッサみたくコンパイルする過程でファイル名と行番号に変換するような定数があればいいんですけど o : any が"x"というメンバーを持っているか調べるのは if ("x" in o) でできるけど、 o.x の型がstringかどうか調べようと if (typeof o["x"] === "string") とやるとESlintの no-string-literalに引っかかってしまう。 このルールを無効にする以外にメンバーの型をチェックする方法ってないですかね? >>814 無理 any型を使ってる時点でtsにできることは無い >>814 一旦変数に入れてからアクセスすればいいんじゃない const x = "x"; if (typeof o[x] === "string") { ... >>816 なるほど、そんな方法が。うまくいったみたい。ありがとう。 使う直前で変数に入れるならdisableにするのとさほど変わらないけど、メンバー名はどこかで 一元管理しておけってことかな。 >>817 単に変数oにinterface定義してあげればいいだけでは。 そもそもtslintじゃなくてeslint使っているという状況もよくわからない あぁ、eslintって書いたのはtslintの間違い。 >単に変数oにinterface定義してあげればいいだけでは。 ネットワークやファイル経由のjsonとか、型情報が落とされたオブジェクトからの復元なんで。 >>818 いや静的型チェックと実行時型チェックをごっちゃにしちゃダメでしょ TypeScriptは静的型チェックを提供するものなんだから実行時型チェックにinterfaceなんて持ち出す道理がない TSの環境の開発の旗振りって誰? いつになったら開発環境が安定するの? webの情報のほとんどが古くて使えない まずVSCodeをインストール npmでts2.xをインストール 型定義は@types/xxxxxxx TypeScriptの実装じゃなくて環境の方だろ? 型定義ファイルもTypingsとか@typesとかいろいろ変遷してきたし TypeScript1.0が出たころ何冊も本が書かれたけど、その後どんどん進化するから誰も手を出さなくなったな。 進化に関係なく使う人が居て需要があれば本は出される 出されないってことは・・そういうことだ ジェネリクスで教えてほしいことがあるんですが 型がundefinedかそうでないかで処理分岐をしたいんですがどうすればいいでしょうか https://goo.gl/L6wazS 上記のようなコードはジェネリクスだとPはコンパイル時に解決されるものだからダメですよね。 じゃあどうすればいいんでしょうか。 もちろん引数にpayload:P みたいなのがあればtypeGaurdが使えるんですけど、それがない場合は? 試してないけど、Pのローカル変数を置いてみるのは? 初期化できないとダメかな。 コンパイル時に型自体の比較が出来ればいいんだけどねぇ 型がundefinedって言うのは違うのでは? 変数がundefinedならわかるけど考え方の次元が違う気がする Add<undefined>(item);ってありえないだろ >>831 undefined型、null型あります undefined null void never 使い分け出来てる? >>829 だめでしたわ。やはり最終的に生成されるjsコードが型がないからなにもないところに型を定義するのは無理っぽい ジェネリクスって使う側には幸せだけどライブラリを作ろうって思うとなかなか難しいす。 実は以下のコードが小さくて見やすいので改造できないか試しているんです。 https://github.com/aikoven/typescript-fsa/blob/master/src/index.ts store.dispatch(someAction()) というように同期型のアクションを作るときはパラメータ引数無しで使えるんだけど 非同期アクションを使おうとした場合はパラメータ引数なしの表現ができないんですよ。 store.dispatch(someAsyncAction.started(undefined)) と書かなきゃけない。 ここのundefinedを省略する方法を探っていたんですよね。 そもそも何がしたいのかわからないんだけど 引数追加したいけないのか? 引数にPが含まれていない以上呼び出し時の型パラメータはハードコーディングしなきゃならんわけで、 それならOnlyH用の関数と分けてしまっても大して変わらんだろう。処理自体は共通化すればいいし。 C++でならテンプレートの特殊化で書けるし書きたい気持ちはよく分かる >>838 もちろんそれならできることは確認してますが、それだったら引数にundefined 許容したほうがいいかなーと。 ジェネリクスは知らないことが色々ありそうなんでもしかしたら解決方法があればと想ったんですが、、、、 typescriptの進化を待ちます、、、。 >>840 c++だとできるんですか。 どう書くのか知りたいです >>841 何というかC++のテンプレートは強力過ぎる Boost::Spiritみたいにコンパイル時に構文解析器を生成するような変態的なことさえ可能 ただしコンパイル時間は死ぬ ttps://ideone.com/6V11EP C++っぽくないコードだけどとりあえず >>842 わ、わかんないです。c++昔使ったことがあるから分かるかと思ったら全然わからなかったという。 でも、ありがとうございました。 import 'reflect-metadata'; function logType(target: any, key: string) { var t = Reflect.getMetadata('design:type', target, key); console.log(`${key} type: ${t.name}`); } class Demo { @logType public attr1: string; } Visual Studio 2017 で上記のビルドは問題ないのですが 実行すると、「exports は定義されていません」と出てしまいます。 tsconfig.json で "experimentalDecorators": true, "emitDecoratorMetadata": true, は指定しています。 何か足りないのでしょうか? >>844 実行環境が書いてないから正確にはわからんのだけど chromeとかブラウザ環境のjsはモジュール管理機構が無いからwebpackとか使わないと直接は実行できない。 初心者なんだけど質問いいだろうか? JS使う必要ある→ES5以前気持ち悪い→ES6未対応多い という流れでTypeScript勉強しようかと思ったんだけど、手元にある本が分かりやすいけど1.0対応なんだ 追加機能を順に追えば問題ないだろうと思ったんだけど、更新箇所が多岐にわたるためか結構面倒で ある程度網羅してそうなのも1.0からは追ってなかったりして、少し悩んでる バージョンごとの差分を丁寧にまとめてくれているサイトか、 最新に近いバージョンを網羅的に解説してるサイトを、差分を意識しながら読もうかと思ってるんだけど、 慣れてる者の視点で、なんかいいサイト or 書籍があったら教えてくれないか? 公式のWhat's newがベスト 差分付き公式アナウンスの日本語訳もあったはず >>847 ありがとう 公式サイトのドキュメントは「英語でこれだけ読むのはだるい」と回避しちゃってたけど、 確かに差分把握程度なら英語苦手でもなんとかなりそうだし、どうしても分からなければそこだけ別途調べればいいかな…… >>847 なんか完璧ボケたレスした、すまない 読んで公式確認して〜してる間に2行目が頭から抜け落ちてた 日本語訳あるなら探してみるわ >>846 その用途ならbabel使え 型が欲しい人が使うのがTS 俺的には初心者こそTypeScriptってカンジがするけどね。 書いてる最中にエラーが出るから曖昧な知識を補填してくれる。 基本的にはES2015 + 型 だからESの仕様を勉強してればそれがTypeScriptとほぼ一致する。 >>850 型がある方が楽なんで問題ありません。ありがとうございます。 普段よく使うのが C#, Ruby なんで CoffeeScript も見た目や好きなんですけど……。 俺はもうTSだけのトランスパイルで落ち着いちゃったんだけどBabel通すメリットある? Symbolない環境でもArrayLikeをfor-ofできるならBabel使うけどそうでもなさそうだし わざわざビルドを複雑にする理由がない やることなくなったんならcommunityに丸投げした大量のバグ修正しろやって感じ プロジェクトの管理者が長期休暇で居なかったからな 今回はバグ修正とリファクタリングが多い 不在の間に溜まってたissueとPRも整理途中って感じだ 4はパフォーマンス改善が大きい あとはifとか もう9月だから5出るぞ 自分でTL;DRって書いてあるからそっとしておけばいいのに >>862 もうそんな時期か ネットで探すと2ばっかりで4少ない >>865 tldrの意味を間違えて解釈してないか? https://eow.alc.co.jp/search?q=tldr TLDR 【略】 =Too long. Didn't read. 長過ぎ。読みませんでした。/長文うざい(と言う人のための要約)。 ◆【場面】ネット上などで「文章が長過ぎる」と文句を言う。転じて「長文を嫌う人のための要約」という意味でも用いられる。 ○次受けが多いほど退場率が早くなる。高くなる 直受けの50万 客:いつまでもうちにいていいよ 3次受けの50万(客は90万払ってる) 客:短期延長していい? 5次受けの50万(客は150万払ってる) 客:作り終わったらとっと出てけ できなかったら即退場だ 長時間労働 高稼働 高スキル要求が多い 零細フリーランスサイトは5次受けから誰もできない難易度の高い仕事 余り物の仕事を紹介してくる。40万円代でやってくれと これならJIETから3次でいったほうがいいな 446非決定性名無しさん2017/08/02(水) 22:12:48.95 JIETに毎月5千円払えば3次から入場できるだろ? 高額をうたうフリーランスのサイトはだいたい5次から45万円 JIETで閲覧応募できる末端価格からさらに搾取するのが高額をみせつけるフリーランスサイトでした 高額案件をみせつけるフリーランスサイトも案件の取得はJIETでした JIETに加入すれば誰でも3次60万からスタートだ。フリーランスのサイトをやってる 自称エージェントもそこから案件情報を取得しきてる。サイトで60万で釣って40万から55万の間でやらしている。 372仕様書無しさん2017/08/11(金) 10:31:43.41 フリーランスで検索すると引っかかる零細ITがやっているフリーランスのサイトはだめだ。 高額に見せているけど実際は50万前後 JIET加入した方がいいよ。案件は毎日千件以上末端価格は60万円 平凡な稼働時間の80万円の案件もある。 ユー子も求人をだしてる。名刺も渡せる。ユー子に名刺が渡せるんだぞ。夢のようだ 自称エージェントはJIETから流れてくる案件を転売してるだけだった。 JIETに加入すれば誰でも案件に応募することができた。収入が40万50万台にならなくて済む エンド - ユー子 - エージェント-JIET 公表価格 90~60 - エージェント×3 = 言い値50万以下 エンド - ユー子 - エージェント-JIET 公表価格 90~60 - エージェント×1 悪質な言い値で50万以下 エンド - ユー子 - エージェント-JIET 公表価格 90~60 - JIETに加入して公表価格で応募できる jsbinみたいなやつでautocompleteをサポートしたeditorあるやつないかな。 誰か作って ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる