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/ >>321 基本TypeScriptはES2015のpolifillだと思っていいけど 単に少ないコードで実装出来るものしか対応してないだけだ __extendsとか__decorateとかね 2.0でasync/awaitもES5で使えるようになるけど、もしWeakMapを対応したら 巨大なコードが*.jsの頭に引っ付くことになるけどそんなの嫌だろ JavaのNashornにrequire関数組み込んでTypeScript使えるようにしたが結構楽しいわ letの暗黙リネームが実行時に何か不具合起こすんじゃないかと少々気になる >>323 letが導入されてから1.8になるまでforループ内でlet使うと特定の条件で実行時エラーを起こしてた 1.8で修正されたから古いバージョンの場合は気を付けた方がいいけど1.8以降は不具合なんて起こさないはず typescript初心者です。 Visual Studioで、 module mod { function func() { alert('func'); } } が、 var mod; (function (mod) { function func() { alert('func'); } })(mod || (mod = {})); になるのですが、分からないのは、 (mod || (mod = {})); の部分です。 これは何でしょうか? どなたか解説お願いいたします。あるいはヒントなどお教えください。 >>325 mod 変数が定義済みなら再利用 or 無ければ新規の空オブジェクトを使う。 複数の場所で mod モジュールが定義される場合に、内容をマージすることになる。 (A || B)はAもしくはBが偽じゃなければその内容(結果)を返す特性があって 単純に言うとmodが空ならオブジェクト代入して無名関数に渡すよってこと >>326 >>327 解説ありがとうございました。だいぶ分かってきました。 もう一つ教えて下さい。 二つのtsファイル ---------------- // file1.ts module mod { function func1() { alert('func1'); } } ---------------- // file2.ts module mod { function func2() { alert('func2'); } } ---------------- から生成される二つのjsファイルを単純に連結して一つのファイルにします。 ---------------- var mod; (function (mod) { function func1() { alert('func1'); } })(mod || (mod = {})); var mod; (function (mod) { function func2() { alert('func2'); } })(mod || (mod = {})); ---------------- こういう単純な例だと問題は無かったのですが、実際の状況では連結したJSの実行時にエラーする場合がありました。 少し調べた限りでは、エラーの有無はJSファイルを連結する順番に依存するようなのですが、そういう事はありますか? やりたいのは、複数のJSファイルをmoduleで囲ってTS化して、そうやって出来上がったJSファイルを一つのファイルに連結したいのですが、エラーが出て行き詰っています。 こういうやり方は間違いですか? >>329 連結する順番でエラーになることはある。 特にグローバルスコープ(関数の外)で処理が走る場合かな? tslint を入れて no-use-before-declare (宣言前に使うと警告) で チェックする手はあるかもしれない。 >>330 情報ありがとうございました。 調べてみます。 おおって思ってchannel9の動画見てみたらマイクロソフトの人が未だにtsd 使ってデモしてたんだけどtsd非推奨じゃなかったんかい 面白いねTypeScript2.0 undefinedとnullはそれぞれ独立した型になって let a: number|null|undefined みたいに宣言するようになるのか C#のvirtual,overrideも実装してくれよ issueには何度かあがってるけどその度に否定されてんだよな、何でだ 匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、 BitTorrentがオープンソースで開発されています 言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか? Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします https://twitter.com/Lyrise_al ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw The Covenant Project 概要 Covenantは、純粋P2Pのファイル共有ソフトです 目的 インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します 特徴 Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW) 接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です DHTにはKademlia + コネクションプールを使用します UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は少なくなります) 検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません 4 Visual Studio Comm. 2015でTypeScript 1.7.4.0を使ってます。 プロジェクトをビルドしてデバッグしても変更が反映されなくなりました。 仕方なく新しいプロジェクトを作ってソースを移動させているのですが、対処法はありますか? >>338 >変更が反映されなくなりました。 何の変更がどこに反映されないん? tsからjsが自動生成されないと言う意味? もしそうならtsに文法エラーが有るんじゃないか? レスありがとうございます。こんなに早く反応があるとは思いませんでした。見逃してしまって申し訳ないです。 >何の変更がどこに反映されないのか ソースコードの変更です。 ビルドして実行してもjsが前回のビルドのままで困っていました。 >tsからjsが自動生成されないと言う意味? >もしそうならtsに文法エラーが有るんじゃないか? 仰る通り文法エラーがあったみたいです。今では正常に実行できています。ご迷惑をおかけしました。 それにしても間違ったコードを書いてもビルドエラーにはならないんですね……。 これではどこでミスったかチェックしにくい。 「新しいプロジェクトを作ってソースを移動させ」たらうまくいくのだがという話じゃなかったのか 「新しいプロジェクトを作ってソースを移動させたらうまくいく」ケースは俺も何度か経験したことがあるなぁ しかも>>338 と違ってコンパイルエラーは発生していない ビルドして実行してもjsが前回のビルドのままってところまでは一致してるんだよな (そもそもビルドできないのだが) Visual Studio2015で二つのTSのプロジェクトがあり、 Proj1 typescrpt1.ts commonA.ts commonB.ts Proj2 typescrpt2.ts commonA.ts commonB.ts 両者で共通のtsファイルが二つあるのだが、こう言う場合、オリジナルをProj1に入れておいて、 Proj2から参照するようなやり方は出来る? 現状では、Proj1でCommonA,Bを変更する度にPorj2に手作業でコピーしているのだが、 それだと毎回そんな作業するのが手間だし、うっかりProj2側でCommonのファイルを変更すると 逆にProj1にも修正をしなくてはならないので困るのだが。 既存のファイルを追加すれば参照してくれるでしょ プロジェクト以下に収めなきゃいけない理由がないなら common, proj1, proj2と横並びにすればいい >>344 レスありがとうございました。 既存のファイルを追加すると、そのコピーが追加されるので、結局343 で 説明したようなファイル構造になります。 困っています。 VSでTypeScriptやってる人が少ないんでないの? CとかC++を一緒にやってる人じゃないと最近の人はVSCodeを使うだろうし >>347 VSCodeだと343のような状況はどうなるの? 共通部分は一元管理が出来るの? 私もやり方知りたいが分からんのでスタティックリンクにしてるがそれじゃ駄目? >>349 windowsでスタテクリンク出来る? >>343 思想的には commonA/B を独立したプロジェクトにしてモジュールとして再利用するんだろうな。 こっそり同一ファイル扱いにするならファイル or フォルダをシンボリックリンクにするか。 これと似たようなものだが、昔は svn:externals を使ったこともあったな。 WindowsXPはハードリンクが出来るようになって便利だからフォルダをハードリンクにしたんだ で、リンクした方が不要になったからごみ箱に入れたんだ まだ、元のフォルダ内はなんともなかった 暫くたってごみ箱を空にしたんだよ そしたら元のフォルダ内のファイルが全部消去されちまったんだよ!当然ごみ箱にも無い 要するにWindowsでフォルダをハードリンクすんなって事 >>353 Windowsってフォルダのハードリンク作れたっけ? そもそも別物なのに同じ挙動をすると期待するのが間違い XPでもジャンクション使えたけど MSの態度が曖昧でどうしたいのかわからなかった Vista でこの辺のファイルリンクとか代替ストリームとか正式サポートされた >>355 XPの時はフォルダのハードリンクは作れたよ。今は知らん Linuxはフォルダ(ディレクトリ)のハードリンクはroot権限が必要になるな OS問わずにフォルダのハードリンクは危険ってことだ XPはシンボリックリンクが無くてハードリンクのみだから罠に嵌められた Vista以降はシンボリックリンクが使えるからそっちは特に問題はないはず XPの時はフォルダのハードリンクは作れん。XP現役で使っている。 異なるドライブでも可能なジャンクションならできる。 >>359 もれも 358 はパーティションをフォルダにリンクする話と間違ってるなーと思ってみてた 358だけど何らかのコマンドでリンクを作成したのは間違いないが 調べてみるとlinkd.exeの可能性が高い 要するにジャンクションって事か? なにぶんXP使ってたのはかなり昔の事なんで記憶が曖昧だったよ Linuxでもディレクトリのハードリンクはできなかったはず。 http://unix.stackexchange.com/questions/22394/why-are-hard-links-to-directories-not-allowed-in-unix-linux >>358 のroot権限うんぬんは、Solaris限定かもしれない。 Windowsでも記事がある。今ならmklinkだけでいい。昔はfsutilなりlinkdなりもあった。 http://www.atmarkit.co.jp/ait/articles/1306/07/news111.html フォルダのハードリンクはできないから >>353 も用語違い。 まぁ、ジャンクション+ごみ箱が多くの不幸な事故を生み出したのはその通りだが。 そんな事より元々の質問の答えは無いの? 俺も知りたい。共通ライブラリ化出来ないと不便だよな。 そんな事より元々の質問をVisual Studio 2015のスレで聞け。 簡単な回答は >>344 >>352 で既出。 VS2015のUIだとファイルのコピーが作られるのが問題なのだろうが *.csproj を直接テキスト編集すれば上位フォルダのパスも扱えるようには見える。 Include="..\xxx" windows10でtypescriptやるには何をインストールすればいいのさ? 知らないものを始めたいときは、とりあえず「○○ 入門」でぐぐれ VSで作っているけど #region #endregion 的な物ない? >>369 Proposal: Preprocessor Directives https://github.com/Microsoft/TypeScript/issues/4691 プリプロセスの提案はあるよ でもこれに限らず、C#にある仕様だからといって優先的に取り組む感じはしないかな 節度を持ってJS文化に適合させていきたいのかもね プリプロセスなんてコンパイラだからこその機能なのにTypeScriptの設計者は 若干偏屈なところがあるよな abstractは導入しといてvirtual,overrideがいらねーとか意味が分からん 色々入れすぎるとまたアンチM$(笑)から叩かれそう >>375 overrideは入りうるよ 一度は断ったけど、最近になって再検討して受け入れることにしたようだ Support override keyword on class methods https://github.com/Microsoft/TypeScript/issues/2000 https://github.com/showcases/programming-languages TypeScript ★13,201 CoffeeScript ★13,152 遂にGithubスター数がCoffeeScriptを超えた 比べる事に意味があるとは思えんがな… CoffeeScriptはAltJSでTypeScriptはBetterJSだ JavaScriptが嫌いな人はCoffeeScriptを使えばいいんだ Intellij IDEAでTS開発捗りすぎワロリンヌ JavaScriptとTypeScriptの関係は C言語とJavaの関係に似ている様な気がする プロトタイプベースは人類には早すぎたんだ クラスベースでないと万人には理解できない プロトタイプベースは既存のインスタンスから継承できる先進的な機能ではあるが そもそも他の言語では隠されてる継承の仕組みがむき出しになってるだけなんで 無理に使う必要もない クラスを作るイディオムとか普通にclassを使えばいいんだ WebAssemblyは当面C++のゲーム用だけどDOMもいじれるようになる予定だから そうなるとまたWeb用言語の勢力図は変わるかもしれないな Webの世界に安定は無い デバッガが当分クソそうだけどWebKitはそのうち充実させて生JS殺しにきそう >>386 CとC++じゃね 統一言語の上位互換で、元々はトランスパイラだし 2.0のstrictNullChecksへの対応は結構キツイなぁ 「フィールドAがあれば、フィールドBも必ずある」ような暗黙ルールを咎められる 「変数?」が「型 | undefined」の扱いになるから 無効な値にはnullを使わずundefinedで統一したほうが良さそうだ 構文としては、返値、ローカル変数、末尾以外の引数にundefinedを許したい場合 いちいち「| undefined」が必要になる。Swiftのように ? は型の側が良い気がするんだが undefinedはプロパティそのものが存在しないことを表すんだからプロパティ側に?付けるのは自然でしょ 2.0は個人的にはかなり好きだな 最近の新言語といえばWeb系のノリで適当に作られてるのが多い中、これほど思想が明確で一貫した言語は珍しい 「存在しない」と「undefinedを保持している」の2つの意味があるからなぁ 前者ならプロパティの属性、後者なら型の属性に解釈できるように感じる strictNullChecksは簡単には対応できなかったが noImplicitThis, noUnusedLocals, noUnusedParameters は 影響が少ないわりにバグを拾ってくれてありがたかった >>398 JavaScriptはundefineって言われても本当にundefinedなのか意図的に設定したundefinedか判別不能だから nullとundefinedを区別する意味があるけど、TypeScriptの場合は「存在しない」なんて有り得ないからnullは要らない子だし undefinedの場合は意図的に設定したと分かる ノードの有無のチェックは存在を確認するし番兵は一般的にnullを使う 前者はプロパティで後者は型だろう F#「あなたはヌルチェックでどれほど人生を無駄使いしているかを知るべきである」 >>400 DOMとかWebGLとか普通にnullを返すからどうしてもnullを使わないといけない場面は出てくる けど、TypeScriptだけの処理の場合はnullを使う意味は全く無いな 本家のコーディングスタイルにもnullじゃなくundefinedを使えと書いてある JavaScriptの根幹にある設計ミスだからな トランスパイラの層ではその尻を拭うのも難しかろう >>404 知ってるけど命令型アルゴリズムを書くときにわざわざnullをundefinedに置換するほどのメリットもない 教科書通りnull使ったほうが思考のオーバーヘッドがなくて楽 どちらでもいい時はundefinedに寄せる Suggestion: Extension methods https://github.com/Microsoft/TypeScript/issues/9 初期から提案のあった拡張メソッドだが、不採用が決まった 型の有無で動作が変わるのはTypeScriptの設計思想からして不適切 クラス定義には含まれないプロパティをインスタンスが持てる言語で そもそも拡張メソッドが成り立つものなのかね? Java interfaceのdefaultメソッドのほうがまだ芽がある気がするが >>406 教科書って何だよ 俺たちの教科書はTypeScript公式のドキュメントだけだ nullかどうか判定するのに hoge === null とかやってないよな? !hoge で統一すればundefinedのみで何の問題も無い 数値と文字が渡されないケースなら ! でも良い 渡されるなら == null (2個) を使う TSLintの設定で、比較で null を使うのは許して、値としては許さないのが欲しいな >>413 ,414とかってnumberな変数にnullとか代入しちゃってんだろうな… そりゃstrictNullChecksで困るわけだ 皆さん結局nullとundefinedを区別しているの?どんなコードを書いているの? 一つの変数で区別する用途を無理やり考えるならば ・undefined: 初期化前 ・null: 利用不可 ・object: 利用可 なんて例があるかもしれない。普通はNullObjectで済ませるか >>418 じゃあif(!hoge)の判定がTypeScript的には何も問題無いことは分かるよな? どの辺が釣りなのか教えてくれ ■ このスレッドは過去ログ倉庫に格納されています
read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる