TypeScript part3

■ このスレッドは過去ログ倉庫に格納されています
1デフォルトの名無しさん
垢版 |
2018/04/26(木) 21:48:23.07ID:mMDBzDaB
http://www.typescriptlang.org/

JavaScript that scales.
TypeScript is a typed superset of JavaScript that compiles to plain JavaScript.
Any browser. Any host. Any OS. Open Source.

part1
https://peace.5ch.net/test/read.cgi/tech/1349187527/
part2
https://mevius.5ch.net/test/read.cgi/tech/1430386649/
2020/10/15(木) 17:16:37.21ID:pazOZeAi
webpack@5、めっちゃ破壊的やん…
2020/10/15(木) 17:39:38.69ID:hmYZFqJj
>>659
お前の目はフシアナか?
https://eslint.org/docs/rules/no-param-reassign

ていうか引数に再代入するガイジなんて必要ないから無差別にエラーで構わんやろ
2020/10/31(土) 19:19:55.76ID:T4Ek6w2r
JavaScriptからTypeScriptへの書き換えオワタ\(^o^)/
JavaScrpit最初に知って一ヶ月で全部書いたから3000行ぐらいだろうと思っていたら
あとでちゃんと数えたら8790行やったorz
実作業4日かかった
ここで4日というのは4日×8Hではなくて4日×24Hの意m(ry
2020/10/31(土) 19:27:20.93ID:cZ59ogsv

TypeScriptやってない頃に書いたコードってTypeScriptのこと意識してなくてオブジェクトの形を動的に変えたりしない?
自分がやったときはそのせいでだいぶ時間かかったわ
2020/10/31(土) 19:31:22.31ID:T4Ek6w2r
prototype文で無理矢理classにしていたやつを
さらに基底クラス(にあたるブツ)の所有でもって継承を表現していたやつの普通のclassと継承への書き換えが苦痛やった、
機械的とはいえ自動化できるほど単純には行かず苦痛やった、
手製イベントのインターフェースが実際何になるのかがぐちゃらけていたので3種類のインターフェースのORで
表現できるとワカルまで試行錯誤を要した、
あとはだいたいうまいぐあいに逝けた
とわいえVSCodeの強力なインテリセンスとリアルタイムエラー報告(スクロールバーのところが赤くなるやつ)が無かったら
到底完遂不可能なところやった、、、
webpack使用
665デフォルトの名無しさん
垢版 |
2020/10/31(土) 19:34:13.19ID:fxcwqRC2
おめでとう
2020/10/31(土) 21:54:44.53ID:bInJNbvZ
ウンコードなJSをTSに変えることで人は強くなるのだ
おまえはまた強くなった
2020/11/01(日) 08:10:24.39ID:jzqs5N6a
委譲から継承に切り替えたらそりゃ辛いっしょ。
乙〜
2020/11/02(月) 00:59:20.76ID:ZpVsHyOp
delegation over inheritance って言うしな
2020/11/06(金) 22:00:05.98ID:4red4XqV
GithubでもTsは定義箇所にジャンプできたりするんだな
強い
2020/11/09(月) 19:43:09.64ID:m4E6C9lQ
今からTypeScriptやるならDenoでいーの?
あっギャグじゃないです真面目な質問
671デフォルトの名無しさん
垢版 |
2020/11/09(月) 21:13:08.03ID:EKGzterf
作った本人は デノ って発音してるように聞こえる
2020/11/09(月) 21:43:52.92ID:nCMtc7Yy
Denoあんまり詳しくないけど、何やりたいかにもよると思う
Web開発をする分にはまだNodeなんじゃないかな
周辺のツールやライブラリが揃ってるので
CLIツールとかならDenoでいーんでの?
2020/11/11(水) 11:00:58.08ID:UmNDS4oo
>>669
jsx/tsx でもイケるようになったね
2020/11/17(火) 22:53:14.47ID:slG9DoRm
https://ncjamieson.com/prefer-interfaces/
https://github.com/microsoft/TypeScript/wiki/Performance

以前 type 推しの人がいたけどやっぱり interface か…
2020/11/20(金) 14:22:41.76ID:Us83CHd5
Announcing TypeScript 4.1
https://devblogs.microsoft.com/typescript/announcing-typescript-4-1/
2020/11/20(金) 21:01:29.75ID:2CLFT5fk
どんどん複雑になるなぁ
ついていけまへんわ
2020/11/20(金) 21:22:14.83ID:2ALlQdvp
逆にバージョンアップでシンプルになっていく言語ってあるの?
互換を完全に切るような言語なら可能だろうけど
2020/11/20(金) 21:41:42.91ID:lbWKfW5j
>>677
Schemeが小さくはなったな
ま、大規模に使われてる言語じゃないから出来る芸当だ
2020/11/20(金) 21:44:46.30ID:4mUoVYL/
言語機能が増えたからと言って全部使う必要はないしな
たまにどこかで使われてるのを見てあれってなったら調べるくらいで良い
2020/11/20(金) 21:50:47.55ID:lbWKfW5j
JavaScriptは動的型だけど、動的型は意識しなくても複雑な事が出来てしまう
TypeScriptはそれらに対して何としてでも型を付けたいんだよ
それだけの事
JavaScript自体は何も変わってない
2020/11/20(金) 23:06:21.09ID:YMHZwsA3
もうaltJS風WebAssemblyコンパイラにして
2020/11/20(金) 23:26:29.58ID:CQfd4Gtb
>>681
つ AssemblyScript
2020/11/21(土) 01:50:51.61ID:uA84MfqB
コンパイラ型ほ生産性低いよ。
2020/11/21(土) 04:03:36.16ID:KUTDu7Bm
template literal typesなんていれるから
型レベルSQLとかおかしな事やり始めてるし
https://github.com/codemix/ts-sql
2020/11/21(土) 09:57:45.60ID:y2efXPmb
くっそ遅くなりそう
2020/11/21(土) 10:46:50.16ID:+IqFTLxs
C++並にコンパイル遅くなったりしてね。
実質マクロだから実行時は速いんちゃう?
687デフォルトの名無しさん
垢版 |
2020/11/21(土) 10:54:34.52ID:QRxilPan
>>678
あれ小さくなったって言えんの?
r7rs なんて common lispよりでかいじゃん。
コアだけなら小さいだろうけどコアだけじゃなんもできんだろ。
2020/11/21(土) 12:06:56.10ID:FiI26J/z
うちのtsプロジェクト、tslintも入れてビルドに10分くらいかかってる。
前に -incremental 試してみてなんかの理由で断念したんだよな。
もう一度トライしてみるか。
2020/11/21(土) 12:34:04.91ID:8nB0jPpm
スクリプトのメリット完全に失っててワロタ
スクリプトはビルドしちゃいけないんだよ
IDEでパラレルLintするぐらいならいいけどな
ビルドしないと動きませんじゃ本末転倒でなにがなんだか
ビルドするならC#とかGoでやりゃいい
2020/11/21(土) 13:16:27.04ID:L7J0TnQj
ts-nodeならビルド不要だけど、それとは違う話か
TypeScriptを直に実行できる処理系は今後も現れないだろうな
2020/11/21(土) 13:30:05.02ID:y2efXPmb
>>689
>ビルドするならC#とかGoでやりゃいい
ブラウザで使うのが現実的じゃない
2020/11/21(土) 13:42:58.96ID:uA84MfqB
Dart始めました
2020/11/21(土) 14:02:54.86ID:xoaJjvLB
そもそもスクリプト言語でスクリプト言語向きじゃない大規模なことをやろうとしてるからこれができたわけで、言語のせいにするのは違う
そもそも今のWeb(アプリ)はTS使ってなくてもビルドしてるものばっかりだし
2020/11/21(土) 14:35:34.39ID:FiI26J/z
まあ、べつに「スクリプトのメリット」を期待してtsを使ってるわけじゃないしな。
とはいえビルド時間が短縮できるならそれに越したことはないが。
2020/11/21(土) 15:32:21.74ID:+IqFTLxs
watch使うからビルド速度そんなに気にならないなぁ
2020/11/21(土) 18:31:06.90ID:/DiusCOy
>>687
RSR7-smallは5をベースにしてるから、それでなんも出来ないとか言ったら、それまでのSchemeを全否定じゃんw
2020/11/21(土) 18:58:48.16ID:+IqFTLxs
いっそガチでマクロ入れてくれたら色々捗るなぁ。凄く読みにくくなるだろうけど。
そこまで行かなくとも、(内部的に複数の関数を持つ)関数オーバーロードとか欲しいかも
2020/12/18(金) 05:11:45.78ID:7UB7snzp
ブラウザ使っててよく Webページ が固まることがあるから、ちゃんとUIスレッド以外で処理しろよとよく思ってたが
JavaScript 自体がシングルスレッドだったのね

WebWoker とかいうのもあるみたいだが、MDN見るに、
言語側でがっつり管理するからスレッドセーフあんまり考慮しなくてもいいみたいだし、これは楽でいいわ

Java やってて、クリティカルセクションの処理が一番嫌いだった
デッドロックの原因探すの大変すぎた
2020/12/18(金) 05:52:13.96ID:427cIB03
そもそもIO待ちにスレッドを使うのがナンセンスだったんだよな
2020/12/18(金) 07:23:19.35ID:7UB7snzp
まぁでも、

JavaScript のソースコード内に書いたものが全部同じスレッドで走ってる

ってだけで、setTimeout とかの実装内では普通に別スレッド走ってるのか。
そりゃそうだよな、そうしないと非同期処理なんてどうあがいても不可能だものね。
2020/12/18(金) 09:04:21.16ID:TR+u0YNG
非同期処理はスレッドの場合とそうでない場合の2種類ある
そうでない場合は基本的にハードウェア割り込みで実装されてる
タイマーとか通信処理とか
ファイルアクセスもOS毎に非同期APIが有るけど、libuvは互換性の為に敢えて同期APIを使う処理をスレッドプールに投げているようだ
2020/12/18(金) 09:10:54.87ID:TR+u0YNG
setTimeoutはスレッドを使ってない様に思うけど、結局の所ユーザー側でそれを知る術が無い
2020/12/18(金) 12:01:30.61ID:hVx5pFA4
>>698の問題はスレッドがどうとか関係なくて、html中のある個所の内容が決まらないと
全体のレンダリングができない構造になっていたとか、jsをダウンロードしないと
レンダリングされないのにその取得に時間がかかっているとかそんなところだろうな。
2020/12/18(金) 13:13:24.97ID:7UB7snzp
最近ないように思うけど、1つのページがブラウザ全体をストールさせることが多かったのよ
そんでブラウザを起動し直さなければいけない

その原因が、JS のスレッドと ブラウザのレンダリングスレッド(UIスレッド)が同じスレッドを共有してることにある

DOM 書き換えてる最中に レンダリングされちゃうと、ページレイアウトがぐちゃぐちゃになるから、全部同じスレッドで処理してるんだけど、
JSの処理でUIが固まるのを防ぐには、JS の DOM 書き換え「以外」の操作を別スレッドでやって、レンダリングスレッドと同期処理すればいい
(Java の synchronize とかの要領)

DOM 自体が レンダリングスレッドに属してるのは、しょうがないと思う
昔、マルチスレッドで動作する UI ライブラリ の多くがデッドロックその他のバグでどうにもならなくなって廃棄された(Java でいう AWT)

ということで、UI が固まるのにはスレッドは関係あると思うのよ
まぁ書き方が悪かったのかもしれんが

あと、JS がシングルスレッドなのはとても良いことだと思ってるからね、自分は
マルチスレッド化したら、どのみち同期化処理に失敗して、デッドロックで今よりも固まること多くなるだろうから

参考にした:
https://stackoverflow.com/questions/30932870/why-doesnt-javascript-get-its-own-thread-in-common-browsers
2020/12/18(金) 13:18:46.36ID:7UB7snzp
JS で重めの処理をしたりバグがあっても、レンダリングスレッドと分離されてれば、
少なくとも UIが固まることはないということね(デッドロックがなければ)

あと、上で最初に書いた、ブラウザ全体が固まるって話は語弊あったかもしれない

ブラウザの各タブのレンダリングスレッドと、ブラウザ全体のUIスレッドは、多分分けられてるんだよね?
後でちゃんと調べます
2020/12/18(金) 13:30:26.86ID:Lq+ZSFwA
firefoxがフリーズすることは最近ちょくちょくあったな
edgeに乗り換えたらきれいさっぱり直った
ffはもうだめかもわからんね
2020/12/18(金) 16:42:31.82ID:7UB7snzp
https://gimhana-ds.medium.com/how-firefox-and-chrome-use-process-and-threads-f58f478561f0

ブラウザのスレッドの話ココに載ってた
いろいろとたどってって疲れたので、全部は見てない

Chrome が Tab ごとにプロセスで、Firefox が Tab にマルチスレッド

Firefox もいっぱいプロセス作ってるけどね、ちゃんと読んだ人教えて
2020/12/18(金) 16:44:48.76ID:7UB7snzp
「Firefox が Tab ごとにスレッド」って書きたかった

そのスレッドも Main Thread = UI Thread (DOM 操作と JS 実行)が1個って意味で、
Raster Thread とか、Composer Thread とか多分他にもいろいろスレッド作る
709デフォルトの名無しさん
垢版 |
2020/12/18(金) 17:50:47.93ID:m88v/MV8
すみません、TypeScriptって開発中はコンパイルなしでブラウザですぐに変更の動作確認をできますか?
710デフォルトの名無しさん
垢版 |
2020/12/18(金) 19:33:24.14ID:JhB3G5yf
そういう時代が来るといいね
2020/12/18(金) 19:42:28.67ID:1RoKReGQ
Chromium Edge で、YouTube を見て、

動画を、5秒先へ進めたりすると、フリーズする
2020/12/18(金) 21:47:42.98ID:TR+u0YNG
WebWorkerは完全にスレッドだぞ
更にAtomicsを使えばスレッド間でatomicなデータ更新が出来る
2020/12/18(金) 21:53:39.89ID:6FItt2sR
WebWorker使いやすくて好き。並列処理面倒くさいからたまにしか使わないけど
2020/12/18(金) 22:14:36.51ID:TR+u0YNG
しかし、SharedArrayBufferはSpectreのせいでほぼ使えない状態だけどね
Spectreに対応したCPUが普及しきらない限り有効にされる事は無い
Webではもはや余計な機能追加はセキュリティーホールの元という認識でこれ以上進化することも無いだろう
ただ、ストアからインストールするPWAはネイティブアプリの代わりだから、機能追加していくと思われる
2020/12/18(金) 23:02:27.28ID:2C+h9Dqf
ストアの収益減らすの絶対許さないマンのアップル
vs
Webから情報吸いたいマンのグーグル
2020/12/19(土) 13:35:36.37ID:biviwPkb
promise(もしくはasync/await)が使えたらシングルスレッドでも実質別段困らない
希ガス
2020/12/19(土) 15:04:10.72ID:+cK8B71a
WebWorkerとか知らんかった...
メインと状態を共有しないのが明確なら便利そうだな
さもなくばAsync/Awaitか
2020/12/19(土) 15:41:20.87ID:1ZOkfUtM
I/O boundはPromiseでいいけど
CPU boundはPromiseじゃだめだからWebWorker使う
マルチコアの有効活用
2020/12/19(土) 18:53:18.58ID:Z1BeWWR+
>>715
それは有る
Appleはブラウザの進化を完全に否定した(WebUSBとか実装しないと明言した)
建て前はセキュリティーだけど、真実はPWAがネイティブアプリと同等の事が出来るとApple税が取れなくなるからだろうね
2020/12/19(土) 18:56:13.80ID:dPku7W9W
税なら税で素直に払えばいい
それでいい製品が使えるならいいことだ
NHKのようなものだな
2020/12/19(土) 19:15:06.66ID:BJ7NL7s9
Appleが採用しない事で足並みが揃わなくなって、Web全体に影響するという……
2020/12/19(土) 19:43:44.12ID:GiU9Z0Di
🍎に足並みを揃えない連中がよくない
723デフォルトの名無しさん
垢版 |
2020/12/19(土) 21:17:41.04ID:qtDJ4FDM
SharedArrayBufferの代替手段って無いの?
結局これは解決する問題なの?
2020/12/19(土) 22:01:28.77ID:oadZnMoo
WebUSBに関してはFireFoxも実装する予定はないので
足並みを揃えてないのはChrome
725デフォルトの名無しさん
垢版 |
2020/12/19(土) 22:06:18.93ID:yZxXMpJa
目の前に機器があってスマホからコントロールしたい要求は一般的だと思うけど、USBの番号を個人で取れなくなったので、ブラウザに実装する意味は薄れたかもしれないですね。
2020/12/19(土) 22:29:23.32ID:lChJAmlD
ここだけはappleを応援するわ
消費者としてブラウザにどんどん変な機能つけるんじゃねぇ
727デフォルトの名無しさん
垢版 |
2020/12/19(土) 22:33:23.73ID:yZxXMpJa
IoT的な意味合いで必要とする人たちが居るんですよ。

自分は見ないから動画機能を付けるなとか、聞かないから音機能を付けるなっていうのと同じでは?
2020/12/19(土) 22:44:29.90ID:8bUfeulY
USB APIをサーブしてajaxでlocalhostと通信でいいじゃん
わざわざブラウザがサポートすることじゃない
2020/12/19(土) 22:47:08.81ID:8bUfeulY
まあ百歩譲って乗せるとしても拡張でいいよな
標準化しようとするのはでしゃばりすぎ
2020/12/19(土) 23:00:43.45ID:YoyJ/iet
ブラウザがんばって欲しい
React + TS 最高
swift + storyboard とかいう糞オブ糞のそびえ立つ糞まみれは2度と触りたくない
2020/12/19(土) 23:55:21.82ID:Z1BeWWR+
PWAの定義が今一漠然としてるから、今後はその辺りが進化していくと思われる
で、PWAでない場合はJavaScriptの動作は思いっきり制限されるだろうね
ま、それで良いと思う
2020/12/20(日) 00:28:55.07ID:qaHDEdvT
> わざわざブラウザがサポートすることじゃない
ほんとこれ
なぜわざわざブラウザでなんでもやろうとするのか
IoTなんだから普通にツールとかアプリとかドライバ書けよと
2020/12/20(日) 00:29:51.25ID:L33Timbq
結局ああいうのって「すげええブラウザでこんなことできた!」
いいたいだけちゃうんか、みたいなのがマジ多い
2020/12/20(日) 03:36:56.04ID:BKQi3Qp0
ブラウザが高機能化しすぎてブラウザさえ動作すりゃいい感じになってきてる
最終的にOS=ブラウザまで進化しかねない
2020/12/20(日) 04:53:54.98ID:gM7i2qLz
モバイル用OSがそんなかんじ
アプリを全てサンドボックスで隔離して出来ることを制限
じっくり時間をかけて出来ることを解放してきた
2020/12/21(月) 18:34:44.48ID:Zh4p3jGs
Web Workerの話が出たから貼っとこう
https://katahiromz.github.io/xword.js/
2020/12/21(月) 18:45:09.04ID:cr+QDiZ1
ゴミサイトの宣伝すんなカス
2020/12/21(月) 18:49:49.16ID:Zh4p3jGs
これPromiseとWeb Workerのマルチスレッドでパズルを生成してる。組み合わせ無限大。しかもInternet Explorerでも動作する。まあ、素人にはひと目では分からんだろうな。
2020/12/21(月) 19:13:00.25ID:cr+QDiZ1
ゴミサイトの宣伝すんなカス
2020/12/21(月) 19:15:36.88ID:L7srYJg2
webworkerってjoinみたいなメソッドある?
2020/12/21(月) 19:15:42.32ID:Zh4p3jGs
悔しいのお、悔しいのお
2020/12/21(月) 19:17:04.35ID:Zh4p3jGs
>>740
Promise.allとかPromise.anyがあるぜ。
2020/12/21(月) 19:25:34.90ID:ApmhBnYc
「蟻人間」でNGぶっこむだけだろうに…
2020/12/21(月) 19:26:17.16ID:Zh4p3jGs
Promise.anyとWorkerを使った例が
>>736
にある。ご参考に。
2020/12/21(月) 20:32:28.70ID:oIaO1Bbh
最近のCPUってコア数バラバラでかつ非対称なコア載ってるから、6個くらいWorker立ち上げて平等に処理投げるんじゃなくて、20個くらいのWorker立ち上げて非対称でいいから適当に処理投げてあとはOSに良きに計らってもらうとかの方がベターなのかな?
2020/12/21(月) 20:34:43.73ID:ApmhBnYc
navigator.hardwareConcurrency
でコア数取れるぞ
2020/12/21(月) 20:44:19.66ID:Zh4p3jGs
>>746
アリがと。修正した。
2020/12/21(月) 20:51:02.61ID:oIaO1Bbh
>>746
なるほど。そういうのがあるのか。
じゃああとは非対称コアへの対応になるけど、これは細かくスライスして逐次投入で良いか
2020/12/21(月) 20:54:25.24ID:+ci58h/H
>>745
そうです
素人が考える半端なスケジューリングはアンチパターンです
2020/12/21(月) 22:43:20.76ID:Z91q9rOU
>>747
お前に向けて書いたんじゃない。
許可無くレスするな糞コテ
2020/12/22(火) 00:55:34.36ID:7oePNPbq
>>750
わかりました、ご主人様
2020/12/26(土) 09:41:16.66ID:3y5CuLti
export interface TypeA {
paramters: {
[k: string]: {
// body
}
};
}

こんな型があるとき、上記bodyの部分の型を取り出すことってできますかね?

const f = (k: string, o: ???): TypeA => {
return { parameters: { [k]: o } };
};

こんなことがしたい。
2020/12/26(土) 10:04:33.59ID:kvlSFYEN
ヨーわからんがこうかね

bitどっとly
/3aJV7Hw

ts playground だが短縮URL NGワードになってるからすまんな
2020/12/26(土) 11:06:25.41ID:3y5CuLti
そこの type Hage の定義に "extreme" を書かずに済ませたい。
この例だと {extreme:string} という型になる部分が変更されたとしても
type Hage の記述を変えずに済むよう TypeA の定義から取り出す
方法がないかと。
2020/12/26(土) 11:21:04.03ID:3y5CuLti
ありがとう、わかった。
["extreme"] を削れば目的の型になりますね。
["paramters"] を使えばいいことに気付かなかった。
2020/12/26(土) 12:19:31.06ID:kvlSFYEN
          |
           |   また髪の話してる
            |  彡⌒ミ
           \ (´・ω・,彡⌒ミ
             (|   |(´・ω・`):::: 感じ悪いよね
              (Y /:(|   |)::::::
               し \:(Y /::
                  \し´
2020/12/27(日) 19:16:51.24ID:xvZc4lDU
もう一つ教えてください。

typeTypeB =
{
tag: 'a';
/* a のボディ */
} | {
tag: 'b';
/* b のボディ */
};

こんな Tagged union type があるとき、 tag === 'a' の時の型(下記)を
取り出すことはできるでしょうか。

type x = {
tag: 'a';
/* a のボディ */
}
2020/12/27(日) 19:33:05.66ID:xvZc4lDU
TypeB & { tag: 'a' } でいけた。ありがとう。
2020/12/27(日) 19:36:45.35ID:MtHOITLb
型に欲情する変態さんは piotrwitek/utility-types でも npm 愛するといいぞ
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況