TypeScript part2at TECH
TypeScript part2 - 暇つぶし2ch150:デフォルトの名無しさん
15/12/23 23:51:10.03 0c+BTX7l.net
>>144
マジかよソニー株売ってくる

151:デフォルトの名無しさん
15/12/23 23:52:52.11 YbqFKYTK.net
>144
それChromeBook持ってるGoogleの一人勝ちになるんじゃないか

152:デフォルトの名無しさん
15/12/23 23:57:52.58 0c+BTX7l.net
日本一みたいな小粒の尖ったソフト出すメーカーはこういうのでコストかけずにどんどん出していったほうがいいんだろうな

153:デフォルトの名無しさん
15/12/25 02:26:54.28 87NUqkxQ.net
TypeScript1.8以降で追加予定または協議中の注目の新機能12つ
URLリンク(falsandtru.hatenablog.com)

154:デフォルトの名無しさん
15/12/25 10:26:24.39 qQE0KVCc.net
noImplicitReturns最高

155:デフォルトの名無しさん
15/12/25 13:17:18.21 zNppH846.net
1.7でも戻り値の型が違うとエラーになるけどnoImplicitReturnsの説明見ると
結構すり抜けるパターンがあったんだな…
全部undefined関連だけど最初からエラーにしとけよ

156:デフォルトの名無しさん
15/12/25 13:34:53.88 zNppH846.net
あとreadonlyはなぜ
function hoge(readonly a: number) { }
と書けないんだよ…
メンバーより引き数に指定出来る事の方がはるかに重要だ
他は劇的に便利になるようなものはないな

157:デフォルトの名無しさん
15/12/25 14:43:14.41 ISLz7uba.net
うんこの上に金粉まぶしてもうんこはうんこ

158:デフォルトの名無しさん
15/12/25 15:03:46.23 9XEpf0Yk.net
>>151
numberにreadonlyを指定することは意味がないと思うが…
引数がreadonlyであることを表明したいなら
そういうinterfaceを定義すれば済む。現行機能で十分じゃないか?
指定子で表明するのはC++がconstで失敗した道だからなぁ

159:デフォルトの名無しさん
15/12/25 17:02:40.14 zNppH846.net
>>153
あー無意味なこと書いてしまった…numberじゃなくて何らかのクラス名だった
ちなみに
function test(readonly v: Data/*参照しかしない事を表明*/): boolean { }
をしたいだけなのに
function test(v: {readonly x: number, ...全部書くのか?): boolean { }
とすればいいという事か?

160:デフォルトの名無しさん
15/12/25 17:36:17.11 9XEpf0Yk.net
>>154
「特定のメンバーしか見ない」と表明したいならそうなるんだろうね
もしくは最初からインタフェースを分けておくか
interface ReadOnlyData { get; }
interface Data extends ReadOnlyData { set; }
単純なフィールドの読み書きだけならいいけど
getXXX() は readonly だよねとか
getXXX() の中でキャッシュ値が変化するけど実質的には readonly だよねとか
やりだすと、C++の悪夢がよみがえってしまう

161:デフォルトの名無しさん
15/12/25 18:43:03.80 zNppH846.net
>>155
そりゃ悪夢だろ
なんでクラス定義する側がそんな苦労しないといけないんだ
ちなみに
class Hoge {
int getXXX() const;
mutable Cache cache;って知ってるか?
こうしておけば何か気にする事なんてあるか?

162:デフォルトの名無しさん
15/12/25 18:47:18.76 zNppH846.net
補足
class Hoge {
int getXXX() const; ← これはcacheの中身は書き換える
mutable Cache cache; ← これが書き換わってもconst性に影響無いと考える

163:デフォルトの名無しさん
15/12/25 23:14:17.73 b7pvx0AF.net
>>153
何が失敗だったの?
C++でconst無かったら怖くてかなわん…

164:デフォルトの名無しさん
15/12/25 23:40:33.36 DXbDvcZw.net
>>151
利用する側に重要な情報だよな。

165:デフォルトの名無しさん
15/12/26 00:31:22.25 iwceh6a5.net
C++でconstに問題あるなんて素人のたわごとだろ
聞いたこと無い

166:デフォルトの名無しさん
15/12/26 00:39:17.52 iwceh6a5.net
C++で仕事を15年以上して凄い奴とかどうしようもない奴とか色々見てきたけど
constに問題があるとか初めて聞いたよ

167:デフォルトの名無しさん
15/12/29 02:41:33.95 cehhvXHA.net
VSCodeがいつの間にアップデートしてて>>124の問題が早速修正されてるな
オプソにした事でユーザーが増えて沢山突っこまれたに違いない
もはやTypeScript最強エディタと言わざるを得ない

168:デフォルトの名無しさん
15/12/29 02:55:10.34 cehhvXHA.net
最近やっとNode.jsとブラウザの両方で使えるコードの書き方が分かったよ
TypeScriptオンリーだったらtsc --module amdとrequire.jsがあればいいし
JavaScriptを使う場合はwebpack使えば出来た
俺はTypeScriptの時でもリリース時にwebpack使って開発中はrequire.jsで
個別にファイルを読み込んだほうがデバッグしやすいからそうしてる
ちなみに///<reference path='hoge.ts'/>とかmoduleやnamespaceは全く使わない
それが今のトレンド (VSCodeのソースがそうしてる)

169:デフォルトの名無しさん
15/12/29 16:10:58.92 O/+FVQhq.net
そりゃそうだ

170:デフォルトの名無しさん
16/01/03 18:07:55.32 CSCP9BIo.net
だれかわかるやつ教えてくれ...
親クラスのstaticメソッドを子クラスでoverrideすると、
実行していない状態でもなぜか親クラスのstaticメソッドが実行されてしまうんだが、これはなぜなんだ...
一応ソースだけ張ってみる。

/// <reference path=

171:デフォルトの名無しさん
16/01/03 18:14:12.59 CSCP9BIo.net
すまんこれ
URLリンク(s1.gazo.cc)

172:デフォルトの名無しさん
16/01/03 23:49:46.81 4W+1xUXu.net
>>165
ecmascriptの方の話?
URLリンク(github.com)

173:デフォルトの名無しさん
16/01/04 00:03:32.03 tFJ0VkMO.net
>>167
おお、ありがたい。
明日ちょっと見てみるわ。
どうもextendsするときに実行しちゃっているみたいだから、そういう仕様なの?とも思ったんだがいまいちわからんくて...
コンパイル結果のjsも明日張ってみるわ
今日はもう寝る

174:デフォルトの名無しさん
16/01/04 09:26:22.97 B4Y3MO4F.net
>>168
console.log(Asian.name);
console.log(Asian.name = "New type");
console.log(Asian.name);
nodeだとname propertyは再定義できないと言われるが

175:デフォルトの名無しさん
16/01/04 12:16:27.68 WW+fICsN.net
>>166
これはおもろいw
--target ES5のクラス継承は__extendsでいわゆるクラスを模したイディオムを
実行する訳だけど、その時にHuman.nameを読み出してるからその中で
console.log()みたいな副作用のあるコードを書いてるとちょろっとお漏らし
しちゃうんだな
ま、getに副作用のあるコードを書くなって事だな
副作用が無ければ気にする事はない

176:デフォルトの名無しさん
16/01/04 21:24:41.15 tFJ0VkMO.net
これが生成されたJS
改行多すぎで書き込めないから二つに区切る。
var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object


177:.create(b) : (__.prototype = b.prototype, new __()); }; var Human = (function () { function Human() { } Object.defineProperty(Human, "name", { get: function () { console.log("Human class name"); return "homo"; }, enumerable: true, configurable: true }); return Human; })();



178:デフォルトの名無しさん
16/01/04 21:25:29.78 tFJ0VkMO.net
var Asian = (function (_super) {
__extends(Asian, _super);
function Asian() {
_super.call(this);
}
Object.defineProperty(Asian, "name", {
get: function () {
console.log("Asian class name");
return "ass";
},
enumerable: true,
configurable: true
});
return Asian;
})(Human);
console.log(Asian.name);
2行目でpが"name"のときに、d[p] = b[p]としてる部分で起きてるっぽい? get の functionを代入しているような気がするんだけどダメなんだなぁ

179:デフォルトの名無しさん
16/01/04 21:27:50.70 tFJ0VkMO.net
>>170
なるほど、やっぱり一応「仕様」なのね。
URLリンク(visible-true.blogspot.jp)
ここを参考に抽象クラス書いてみようとしたら毎回エラーになったのがきっかけで気づいたんだ。
普段は副作用のないコードを書くようにしてるから問題ないけど、気持ち悪いな...

180:デフォルトの名無しさん
16/01/04 21:29:44.16 jSUxRRs2.net
console.log(Asian.name);
をもう一度実行

181:デフォルトの名無しさん
16/01/04 21:58:10.67 tFJ0VkMO.net
>>174
最後のconsole.log(Asian.name); をふたつにするってこと?
↓こうなるだけだけど...そうじゃなくて?
Human class name
Asian class name
ass
Asian class name
ass

182:デフォルトの名無しさん
16/01/04 22:06:12.44 tFJ0VkMO.net
>>172
うぉお自己レスだがいまさら理解
definePropertyにアクセスするとgetのfunctionが実行されるから、
extendsのときの代入で実行が走ってるのね
超すっきりしたわ
なるほどね

183:デフォルトの名無しさん
16/01/04 22:18:27.58 tFJ0VkMO.net
いやまてこれダメじゃねーか
getterちゃんと継承できてねーぞ
...できてねーよな?

184:デフォルトの名無しさん
16/01/05 00:16:07.40 JRpiyNmr.net
上書きしなきゃ親のが呼び出されるでしょ

185:デフォルトの名無しさん
16/01/05 04:38:20.48 uTMnp3Vg.net
URLリンク(github.com)
存在しないユースケースだから修正しない。
使いたければ__extends関数を自作してオーバーライドしろとさ。

186:デフォルトの名無しさん
16/01/05 13:11:51.67 FYDa5kHc.net
>>178
継承されてないな
まず最初に言っておくけどAsian内のgetを消すとAsian.nameは
Function.nameにアクセスする事になってAsianと表示されるからfuncとかにしておく
そうするとhomoとだけ表示されてHuman class nameは表示されないから継承されてない
ちなみに--target ES6の場合はconsole.log('Human class name');が実行されて
なおかつ継承もされない
要するに現状でES6と同じ挙動という事になるから自前の__extendsを作ると
将来ES6でコンパイルした時に困る事になる (継承をカスタマイズ出来ないし)
現状で問題の無いコードを書くしかないというのが結論だな

187:デフォルトの名無しさん
16/01/05 13:24:39.62 FYDa5kHc.net
ES6のclassは__extendsでやっている事のシンタックスシュガーだってのが
分かるおもしろい例だった
結局ES6になってもプロトタイプベースのオブジェクト指向っていうところは
変わってないんだよね

188:デフォルトの名無しさん
16/01/06 08:53:19.05 Fwd934PG.net
>>179
神だ、やっと神と、、、!
ありがとう!
ユースケースがないってのはちょっとひっかかるけどな。
キーワードstaticってクラスに属してるだけでstatic getが副作用を起こさない、他の影響をうけないって保証されてるわけじゃないし。
そう書けってことではあるんだけどね。

189:デフォルトの名無しさん
16/01/18 13:03:11.26 ELUPuNqk.net
MSYS上のvimからtsuquyomi使えんかった
多分Nodeがマウントされたパスとか/c/から始まるパスを理解できないんだろうな
MSYS版Nodeがあればなぁ

190:デフォルトの名無しさん
16/01/18 1


191:7:46:53.97 ID:ELUPuNqk.net



192:デフォルトの名無しさん
16/01/22 13:05:16.12 yW17RJ8f.net
ChakraCoreを使ったNode.jsが動いたらしい
しかし最近のMSはプロジェクト名にCoreを付けまくってるな

193:デフォルトの名無しさん
16/01/23 10:08:20.25 ym0h+5An.net
--module commonjsの状態でmoduleとnamespaceを使わずに
export function ...
export var ...
って書いたソースがcommonjsのモジュールとしてコンパイルできるのに
外部からimportしようとするとモジュールが見つからないって怒られて困った
--module amdだと大丈夫みたいなんだけど、バグだったりするの?

194:デフォルトの名無しさん
16/01/23 12:35:34.21 xXuhphCo.net
公式のwiki読め

195:デフォルトの名無しさん
16/01/23 17:32:00.25 ym0h+5An.net
import時のパスが./で始まるかどうかの違いでした
import * as test from "test"; // amdはOK, commonjsはエラー
import * as test from "./test"; // amd, commonjs 共にOK
test.tsを./node_modulesに突っ込んで--moduleResolution nodeなら前者もOK

196:デフォルトの名無しさん
16/01/24 10:30:33.12 jiNDRvMm.net
必読URLリンク(github.com)

197:デフォルトの名無しさん
16/01/25 13:40:35.40 ipEE3CyC.net
TypeScriptのモジュールの扱いが激烈に難解になったからみんなハマルだろうな
俺は大体理解できたけど

198:デフォルトの名無しさん
16/01/25 13:50:19.91 FKcC8XYP.net
苦笑

199:デフォルトの名無しさん
16/01/25 14:01:32.82 ipEE3CyC.net
>>191
そんなおかしいなら --moduleResolution の意味を言ってみてよ

200:デフォルトの名無しさん
16/01/25 14:05:44.07 ipEE3CyC.net
>>191
あと、 --moduleResolution node で認識される*.d.tsの書き方も言ってみてよ
これドキュメントに書いてないんだよな

201:デフォルトの名無しさん
16/01/25 14:22:21.52 ipEE3CyC.net
URLリンク(qiita.com)
この人の↑これを見るのが一番まとまってて分かり易い
> ・declare module "hoge" 形式の定義は利用できない
って書いてあるけど実際はもう少し修正しないと駄目だった
とりあえず適当に修正すれば通るように出来るけど何が問題なのか
ドキュメントが見つからず確証が持ててない

202:デフォルトの名無しさん
16/01/25 17:21:06.80 FKcC8XYP.net
みんなはcommonjs使うからハマらないっての
クイズじゃなくて何がしたくてできないのかのほうを書けよ

203:デフォルトの名無しさん
16/01/25 19:30:10.53 ipEE3CyC.net
>>195
>>194の話はcommonjsとか関係無いよ、モジュール全般の話でしょ
それにブラウザからcommonjsロードできないのにみんな使うってのはおかしいでしょ

204:デフォルトの名無しさん
16/01/25 21:26:21.10 FKcC8XYP.net
貴殿の力量、拝察して候

205:デフォルトの名無しさん
16/01/26 10:19:05.81 kKfPXzbs.net
JavaScriptから来た人には歴史的経緯と後付モジュール機構は常識の部類なんだろうけど、他言語からくるとjs/tsのモジュール関係は病んでるよな

206:デフォルトの名無しさん
16/01/26 14:10:10.49 pw0cS8Zr.net
>>197
最後にはそれかよw
ちゃんと具体的に書いてくれないと完全に負け惜しみにしか聞こえないよ

207:デフォルトの名無しさん
16/01/26 14:24:44.17 pw0cS8Zr.net
>>198
TypeScriptには内部モジュール(内部は造語)があって外部モジュールについては
あまり重要視されてなかった経緯があるからね
module→namespaceって名前を変えたけどmoduleキーワードは今も使える
もはや混乱の元でしかないし<<<reference file="hoge"/>ももはや役割を終えてるからなくした方がいいな
で、importの意味が1.6でしれっとそれより前の解釈と思いっきり変わってしまったのが混乱の元だ
とりあえずVSCodeのソースを見れば最近の*.tsの書き方が分かる
俺はそれ見て同じ書き方をしようとしてmodule,referenceから移行しようとして
importがトンでもない事になってる事にやっと気付いた

208:デフォルトの名無しさん
16/01/26 14:38:18.32 HDdwtYdo.net
requireからES6 modulesまでの変遷は確かに知らずに見ると混乱する
NodeのStreamAPIと違ってES6 modulesで古い情報にフィルタかけられるのが救い

209:デフォルトの名無しさん
16/01/26 15:03:49.80 pw0cS8Zr.net
>>197みたいにNode.jsオンリーで歴史的経緯も知らずにnpm installだけして
使ってる人にはimportでハマルとか言ってる奴はプッっとしか思わないんだろうね
ま、そういう奴が居るって事は1.6の変更は意味があったといえる
俺は1.0ぐらいからブラウザ用にmodule,referenceでゴリゴリ書いてたから
移行するのがスゲー大変だった
しかし、お陰で汎用的な機能はNode.jsとブラウザの両方で使えるように
書けるようになったから移行する意味はあった(それにES6のmoduleにも対応してるはず)

210:デフォルトの名無しさん
16/01/27 12:12:11.54 ChRzt0VQ.net
webpackとか使うとjsの場合以下のようにtemplateとしてhtmlコードを取り込むことができますが、
```
export default {
template: require('./index.html'),
}
```
typeScript単体で使う場合で似たようなことをする方法ってありますか?

211:デフォルトの名無しさん
16/01/27 14:52:35.66 H1ToiAO7.net
>>203
1.6からjsxに対応したからとりあえず typescript jsx で検索してみなよ
それが目的のものかは分からんけど

212:デフォルトの名無しさん
16/01/29 14:25:20.13 EB80mx/+.net
URLリンク(twitter.com)
ES2016 will likely not contain async functions.

213:デフォルトの名無しさん
16/01/29 17:10:41.49 LlSYvxYC.net
安心してください、TypeScriptはasyncが使えます

214:デフォルトの名無しさん
16/02/05 16:04:12.96 7HipHDXr.net
TypeScript 1.8ベータにはJavaScript統合、シームレス関数コンポーネントなどが追加される
URLリンク(www.infoq.com)

215:デフォルトの名無しさん
16/02/06 01:27:25.39 Krz+De6m.net
>>207
Announcing TypeScript 1.8 Beta
URLリンク(blogs.msdn.microsoft.com)
TypeScript 1.8.0-beta 変更点
URLリンク(qiita.com)

216:デフォルトの名無しさん
16/02/12 11:57:21.91 tB/7lfI+.net
typeScriptでつくられたOSSなプロダクトって何があるのかな。
typeScriptの勉強に使えそうな手軽なサイズのものがいいんですが
特にVSC以外で

217:デフォルトの名無しさん
16/02/12 12:46:41.49 whWT7zC/.net
vs版1.7.6を入れたのにバージョン情報では
1.7.5と表示されるんだけどミスってる?
npm installでも1.7.5だった

218:デフォルトの名無しさん
16/02/12 21:36:59.74 tB/7lfI+.net
typeScriptでWebWorkerのコードを書こうとするとpostMessage関数で怒られるんです。
onmessage = function(e) {
console.log('Message received from main script');
var workerResult = 'Result: ' + (e.data[0] * e.data[1]);
console.log('Posting message back to main script');
postMessage(workerResult); //<―ここ
}
error TS2346: Supplied parameters do not match any signature of call target.
パラメータがあってないって話なんですが定義を見てみると
declare function postMessage(message: any, targetOrigin: string, ports?: any): void;
とありtargetOriginが必要みたいな記述になっています
定義の参照先が違うせいだと思うんですが直し方がわかりません。ご教示下さい
参考
URLリンク(developer.mozilla.org)

219:デフォルトの名無しさん
16/02/12 22:34:57.47 0bFQuZrs.net
ES以外の定義が違うなら自分でプルリク出さないと直らないぞ
DOM周りは基本放置だからな

220:デフォルトの名無しさん
16/02/12 23:19:19.89 DcD4rrQS.net
1.7.5に入ってるlib.webworker.d.tsには
WorkerインターフェースにpostMessage(message: any, ports?: any): void
グローバルにpostMessage(data: any): void
ってなってるけど

221:デフォルトの名無しさん
16/02/13 12:50:38.42 SL3t4ard.net
>>213
先頭行に
/// <reference path="lib.webworker.d.ts" />
と入れてもエラーが出るんですが、どうすればいいんでしょう
error TS6053: File 'lib.webworker.d.ts' not found.

222:デフォルトの名無しさん
16/02/13 16:34:47.12 DMjW/lz+.net
URLリンク(developer.mozilla.org)
URLリンク(developer.mozilla.org)
を見ても第2引数は必要
引数要らないバージョンは
URLリンク(developer.mozilla.org)
のMessagePort用だな

223:デフォルトの名無しさん
16/02/13 16:42:47.45 DMjW/lz+.net
いや間違えた…
window.postMessage以外は第2引数が省略可能だな
ただwindow.postMessageも第2引数を省略すると"*"が指定された時と同じ動作をするように
ブラウザが勝手に対応してるっぽいな
格オブジェクト毎に微妙に役割りが違うものを全部一緒くたにpostMessageにしてるから
結構ややこしい事になってるな…
とりあえず>>214はwindow.postMessageを使ってるのであれば
第2引数に"*"を指定すればいいはずだよ

224:デフォルトの名無しさん
16/02/13 16:44:08.08 DMjW/lz+.net
格オブジェクト→各オブジェクト 念の為…連投スマン

225:デフォルトの名無しさん
16/02/13 17:00:54.46 DMjW/lz+.net
何度もごめん
やっと本質が理解できた
根本的な解決には2.0にならないとダメらしいな
それまではpostMessageには"*"とかundefinedを指定して誤魔化すのが一番手っ取り早い

226:デフォルトの名無しさん
16/02/14 10:23:55.62 +Fbk6tbu.net
いえ。聞きたいことは
golobalscopeの参照先を lib.webworker.d.ts
にしたいわけです。
```
new Wroker(“./worker.js”); // <―ここのworker.js内のグローバルスコープをなんとかしたい
```
上記のように別スレッドでwroker.jsを動かすわけですけど、
worker.js内のグローバルスコープはdocumetにアクセスできなかったり独自のものみたいです。
それで参照先を lib.webworker.d.tsにしたくて/// <reference path="lib.webworker.d.ts" />としても
ファイルがないと怒られます。
typescript自身が持っているd.tsファイルに対してのリファレンスの貼り方を教えていただきたいのです。

227:デフォルトの名無しさん
16/02/14 10:35:21.09 wvAk6z1k.net
>>219
URLリンク(github.com)
の2.0にあるImprove lib.d.ts modularityがそれを簡単にやる為のものらしい
要するに今のところそういう事が簡単に出来無いってこと
URLリンク(blog.scottlogic.com)
この辺に一応回避方法が書いてあるよ

228:デフォルトの名無しさん
16/02/14 13:52:50.82 +Fbk6tbu.net
>>220
情報ありがとうございます。
とりあえず
```
(<any>postMessage)(workerResult);
```
と書いてエラー抑制で回避することにします。

229:デフォルトの名無しさん
16/02/14 17:38:32.66 lb9byLOu.net
いい方法が見つかるまではtsconfig.jsonの"files"にlib.*.d.tsのパスを入れておけばいいよ
tsconfig.jsonの書き方と使い方は公式Wiki参照

230:デフォルトの名無しさん
16/02/19 17:13:14.79 YBiR9mLr.net
NonNullableきたこれでかつる

231:デフォルトの名無しさん
16/02/23 10:35:12.67 6s2CAaJ0.net
Announcing TypeScript 1.8
URLリンク(blogs.msdn.microsoft.com)

232:デフォルトの名無しさん
16/02/23 11:46:00.00 UPC5owG9.net
>>224 おつ
TypeScript for Visual Studio 2015 は Details > Releases から 1.8.4 を選ばないと
以前のものがダウンロードされるので注意。
あと Visual Studio Code のインテリセンス等の挙動は
tscへのパスの差し�


233:ヨえだけでは完璧ではないぽい。なにか方法があるかもしれないが



234:デフォルトの名無しさん
16/02/23 12:25:15.11 MgSDdSDU.net
VSCodeは自前でtsserver.jsを持ってるからそれを差し替えないと駄目でしょ
下手に差し替えないでバージョンアップを待てばいいんじゃね?
すぐするでしょ

235:デフォルトの名無しさん
16/02/23 12:28:20.34 MgSDdSDU.net
ちなみにメインで使ってるわけじゃないけど、なんかVSCodeって使いづらいような気がしてきた
バージョンアップで改善されてくとは思うけど、メインで使ってる人は使い心地がどうなのか知りたい

236:デフォルトの名無しさん
16/02/24 19:37:32.88 cGyLx1gy.net
for (let i = ...) は許されるのに
if (let o = ...) や while (let ...) が許されないのは仕様でしょうか?
nullスキップをしたいときにこの書式を使いたい場合が結構あるのですが

237:デフォルトの名無しさん
16/02/24 21:55:18.34 aRwJuOw8.net
仕様。仕様書見れば書いてあるよ
let o;
if (o = ...) と書いても結果は変わらないと思う
o がブロックの外に漏れるというだけで

238:デフォルトの名無しさん
16/02/24 23:27:54.96 cGyLx1gy.net
>>229
元のJavaScriptや、もしかするとJavaに倣った仕様なんですかね
どうせJavaほど真偽判定に厳しくないんだから、C++並に緩くして欲しいなぁ

239:デフォルトの名無しさん
16/02/25 10:03:46.85 pumiDuUu.net
>>230
仕様ってのはecma262(JavaScript)の事ね
TypeScriptはJavaScript(主にES6以降)+型だからJavaScriptの文法を壊すような
機能追加はしちゃ駄目だと思うし、そういうのはほとんど無いと思う

240:デフォルトの名無しさん
16/03/03 15:07:54.17 RrjC3Y1y.net
chrome extensionの開発にtypeScript使っています。
型があるとドキュメントを見なくてもメソッドとかプロパティを探せるので
捗ります。
本当にES2015 + type って感じなんですね。そんなに仕様が分かっていなくても何となく使えるのがいいです。
一つお聞きしたいのですが
Node型からlengthプロパティを使いたいのですが
参照先にlib.d.tsにはないみたいでエラーなります。
chromeデバッカでは見えているのですが、、、
とりあえず以下のように回避しているんですが
const selection = window.getSelection()
(<any> selection.focusNode).length
本来の対応方針を教えて下さい。
例えばどこかに専用のファイルを作ってそこで
interface Node {
}
自分用のinterfaceを作るとかですかね?

241:デフォルトの名無しさん
16/03/03 15:39:48.75 tDWJCpRY.net
>>232
Node.length って何? すべての Node は持っているわけではないと思うが
エレメントの種類が限定できるなら <any> のところにそのクラス名を書けば?

242:デフォルトの名無しさん
16/03/03 17:00:58.63 RZS145YN.net
babelとtypescriptって何が違うの?
あとes6が普及したらtypescript使う意味ってなくならない?

243:デフォルトの名無しさん
16/03/03 17:04:13.70 RrjC3Y1y.net
>>233
すいませんでした
lengthプロパティはNodeインターフェースにあるのが正しいのかと勘違いしてました。
Element型にキャストして使うことにしました。

244:デフォルトの名無しさん
16/03/03 17:11:25.26 RrjC3Y1y.net
>>234
ES2015 + 型という図式です。
VSCとかと連携すると補完が聞いて素敵です。
EcmaScriptに型が付く予定はないと思うので差別化はできているのではないでしょうか?
逆に言語として学習コストが低くていいのではないかと(ES2015とあんまり変わらない点)。
特に新規のライブラリを使うときはEditorが教えてくれるので、凄くいいです。

245:デフォルトの名無しさん
16/03/03 17:29:33.07 tDWJCpRY.net
>>235
Element型にもlengthってあったっけ…
>>234
es6が普及した場合、むしろBabelがその役割を終える
TypeScriptと競合するのは、JSDocの型注釈 @type かな
JS+JSDocの


246:記述量を減らしたのがTypeScriptだと思う



247:デフォルトの名無しさん
16/03/03 18:49:06.70 9M5RRL5I.net
>>235
ちゃんとリファレンスは読んだのか?
URLリンク(developer.mozilla.org)

248:デフォルトの名無しさん
16/03/04 16:37:36.83 5mk497Pl.net
ちなみにjQueryでDOMをいじくるのが主な目的の人には向かないね
jquery.d.tsがany使いまくりだから素直にJavaScriptをそのまま使う事を勧める
それとDOMはJavaScriptとして使ってる内は気付かないけど
実はかなり型が複雑で理解してないと>>232みたいな問題にぶつかる
悪いのはTypeScriptではなくて元の仕様がそうなってる
直接DOMをいじる場合も型をちゃんと全部把握するかJavaScriptをそのまま使う方がいい

249:デフォルトの名無しさん
16/03/04 17:04:24.90 JX9S2zww.net
>>239
むしろ型を把握していない人ほどオススメなのでは。
Editorが教えてくれるようになるし
実行時にエラーになってデバッガでチェックというサイクルを何度も踏む手間が省ける。

250:デフォルトの名無しさん
16/03/04 17:55:19.19 5mk497Pl.net
>>240
いやいや、例えばgetElementById()で返すのはHTMLElementだけど
これはlib.d.tsでextends HTMLElement検索すると分かるけど、全てのベースクラスだから
使う時は毎回適切にキャストする必要があって面倒臭い
で、間違うとコンパイルエラーとか実行時エラーになる
ちなみにjQueryとDOMでの話であって一般的には型があった方がいいのはその通り

251:デフォルトの名無しさん
16/03/04 20:45:00.83 JX9S2zww.net
>>241
ちなみにHTMLElementの子クラスをキャスト候補として出す機能とかありますかね?
typeScriptというよりもVSCよりな質問かもしれませんけど。

252:デフォルトの名無しさん
16/03/04 20:49:58.95 JX9S2zww.net
“error TS2304: Cannot find name” の対応ってどうされてますか?
例えばchrome Extension作りたくて chrome.d.tsを用意したんですが
RROR in …/typings/browser/ambient/chrome/chrome.d.ts
(5221,70): error TS2304: Cannot find name 'DirectoryEntry'.
ERROR in …/typings/browser/ambient/chrome/chrome.d.ts
(5807,22): error TS2304: Cannot find name 'MediaStreamConstraints'.
ERROR in …/typings/browser/ambient/chrome/chrome.d.ts
(5809,22): error TS2304: Cannot find name 'MediaStreamConstraints'.
ERROR in …/typings/browser/ambient/chrome/chrome.d.ts
(5819,73): error TS2304: Cannot find name 'MediaStream'.
以下の様なエラーメッセージが出ます。
それで依存している型定義ファイルを探して追加するとまたこのエラーメッセージが増えていくので
該当箇所をanyとかにしてごまかしているんですが、
本来の対応方針としてどうすればいいんでしょうか?

253:デフォルトの名無しさん
16/03/04 23:31:41.69 QtC/Wo3p.net
>>243
chrome.d.ts ってこれか? URLリンク(github.com)
コードの頭に参照があるから /// <reference path='../filesystem/filesystem.d.ts' />
このあたりが必要なのでは URLリンク(github.com)
よくわからんが DefinitelyTyped を丸ごともらうか、<reference> それぞれを探してみては?

254:デフォルトの名無しさん
16/03/05 10:47:09.14 E0f29hr+.net
コード中でキャストしないようにと思うと
interface Document { getElementById(id: 'myElement'): HTMLAnchorElement; }
みたいな定義を読ませておくしかないよね

255:デフォルトの名無しさん
16/03/05 12:33:38.03 jb1F0oyu.net
>>244
typingsを使うときに勝手に再帰的に取りに行ってくれるオプションとか無いですかね。
今は諦めて、俺俺d.tsファイルに空のinterface作って対応してます。

256:デフォルトの名無しさん
16/03/05 14:42:35.70 GXDl5hqY.net
>>245
JSON2HTMLというか、TSからHTMLを生成すると自然なんだろうか?
デザイン担当との兼ね合いで、


257:そう勝手にはいかないだろうけれど。 >>246 「コンパイルが通らなかったのでキャストを追加しました」 的な危うさを感じるな……まぁ好きにしなされ。



258:デフォルトの名無しさん
16/03/05 15:53:12.74 JVykV3V4.net
とりあえずAngular2+TypeScriptを使えば全てが丸く収まる(はず)

259:デフォルトの名無しさん
16/03/09 02:26:14.01 YWG9oDIr.net
>>224
TypeScript 1.8はモジュール拡張のサポートを提供する
URLリンク(www.infoq.com)

260:デフォルトの名無しさん
16/03/09 13:38:59.08 YZujmLFz.net
C,C++などの
#ifdef ABC
#endif
みたない構文はありますか?

261:デフォルトの名無しさん
16/03/09 13:55:35.24 wC8YUP1c.net
>>250
ない。
もし不要なコードの排除が目的なら、単にif文を使っておいて、
出力した .js に Closure Compiler 等の最適化を行うポストプロセスすると
最終的な .min.js からは無駄なコードを消してくれる場合もある。

262:デフォルトの名無しさん
16/03/09 14:19:18.40 YZujmLFz.net
>>251
なるほど。
でも、さっそく
if(false){
...  // 不要なコード
}
としてみたら、
Unreachable code detected.
と出ました。
var use= false;
if (use == true) {
...  // 不要なコード
}
で行けました。こんなやり方おかしいですか?
Closure Compiler はビルド後に実行するコマンドでやるのでしょうか?

263:デフォルトの名無しさん
16/03/09 15:24:10.02 wC8YUP1c.net
>>252
そんな感じでおk。var vs. const や == vs. === 等は
ポストプロセスとの相性があるだろうから試してくれ。
useの定義だけ単品のファイルにしてtsconfig.jsonで切り替えると良いかも。
もちろんtscの後に実行する。やり方はビルドツール次第。
デバッグ中はminifyされると面倒だから、リリース時だけ使うといい。

264:デフォルトの名無しさん
16/03/09 20:12:15.23 YZujmLFz.net
>>253
サンキュウ。
君詳しいな。また教えてくれよ。

265:デフォルトの名無しさん
16/03/09 20:52:59.74 YZujmLFz.net
関数のオーバーロードは、
function f(x: number):void;
function f(x: string): void;
function f(x: any): void {
...
}
とやるようですが、引数を取らない同名の関数も一緒に定義したいのですが、
function f():void;
これを上の定義に追加するとエラーします。
どうすれば良いですか?

266:デフォルトの名無しさん
16/03/09 21:30:41.53 0Gq8vrNb.net
>>255
それ古い書き方。今時は
function f(x?: number | string): void { }
と書く

267:デフォルトの名無しさん
16/03/09 21:32:56.87 0Gq8vrNb.net
古い書き方でやりたい場合は
function f(x?: number):void;
function f(x?: string): void;
function f(x?: any): void {
で出来る

268:デフォルトの名無しさん
16/03/10 10:54:45.09 z40A+Y3k.net
>>256>>257
うまくいったわ。ありがとう。
もう一つ教えて。Visual StudioでTypeScript勉強中なのだが、
function f(){
   ...
   return ;
   ...
}
とreturn入れると、
Unreachable code detected.
のエラーになってしまう。
JavaScriptなら警告だけなのに。
エラーになると実行出来ないのだが、対策ありますか?

269:デフォルトの名無しさん
16/03/10 11:13:40.34 la5WEUke.net
>>258
--allowUnreachableCode
tsconfig.json に書くなら "allowUnreachableCode": true
テスト用の一時的変更でない限り、高確率でバグだろうからな

270:デフォルトの名無しさん
16/03/10 13:16:14.83 z40A+Y3k.net
>>259
レスありがとうございます。
ググったらVS2013ではtsconfig.jsonが使えない?
ようなんですが、どうにかして
allowUnreachableCode を有効化する方法ありますか?

271:デフォルトの名無しさん
16/03/14 07:46:17.33 CkOIJo3B.net
JavaScriptの10個くらいのファイルがあり、それをTypeScript化したいのです。
全部のファイルで、同じmodule名で囲ったら、互いに変数や関数を参照出来ると思ったのですが、出来ませんでした。
TypeScriptではC#で言うところのPartial Classみたいにする方法ありますか?

272:デフォルトの名無しさん
16/03/14 08:26:1


273:9.76 ID:rt0F/u0o.net



274:デフォルトの名無しさん
16/03/14 10:05:23.83 WJ0CXY/9.net
JavaScriptの方で擬似的に名前空間化されていないものに
後からnamespaceで囲う必要はないと思う
partial classは実行時に実現できたとしてもclass内部の型定義が不完全になるでしょ
interfaceはいくつでも同名で定義できるので、全てpartialのようなもの

275:デフォルトの名無しさん
16/03/14 14:40:23.18 CkOIJo3B.net
>>262 >>263
詳しい説明ありがとうございました。
>JavaScriptの方で擬似的に名前空間化されていないものに
>後からnamespaceで囲う必要はないと思う
JSのファイルは全部で50個くらいあり、
全部をTS化したいのです。
それで、取りあえず、ある特定の機能に関連している10ファイルを一つにしたくて、
同じmodule名で囲ってみました。
結局、その10ファイルの中でも互いに利用する関数はそれぞれexportして互いに利用し、
一方グローバル変数は一つのTSファイルに集めてそれらを全部exportして10個のTSや、他のJSファイルの中で利用しました。
こういう方針でやるのは、正統的ではないですか?
正しい手法があれば教えて下さい。

276:デフォルトの名無しさん
16/03/14 15:30:12.67 rt0F/u0o.net
たまたま見つけてタイムリーだったので張っておく。現実装に依存しすぎだとは思うが。
> TypeScriptのクラスをnamespaceで拡張する
URLリンク(qiita.com)
複数ファイルから成る出力全体をモジュールで包む機能って無いんだっけ?
単に function() { ... } で囲んでくれるだけで良いんだけれど。
モジュール内部の各所では使うものの、外部からアクセスする必要のないものはローカル化したい。

277:デフォルトの名無しさん
16/03/14 15:55:47.88 sQIOa7FM.net
最近はもうnamespaceを使うのはお勧め出来ないな。ES6の機能にないし
URLリンク(blogs.msdn.microsoft.com)
この最初に書いてある方法がclassを拡張するには今時の方法なんじゃないかな?
ES6のmoduleは1ファイル1モジュールな感じだから全部のファイルを特定のモジュール名で括るという
考えは捨てるべきだと思われる
メインのファイルがそのほかを全部importして必要なものをexportするべきだろうね

278:デフォルトの名無しさん
16/03/14 22:56:12.42 CkOIJo3B.net
>>266
教えて貰ったリンク先見ても良く分かりません。
もう少し分かり易い例はどこかに無いでしょうか?

279:デフォルトの名無しさん
16/03/15 19:08:51.76 oaSHh/yi.net
>>265
classの中にnamespaceと言うのが
違和感有ります。皆さんはどうですか?

280:デフォルトの名無しさん
16/03/15 20:09:42.73 9cVBtkdm.net
どうでもいい

281:デフォルトの名無しさん
16/03/16 00:53:23.89 dOYh+a0T.net
どうでも良くない

282:デフォルトの名無しさん
16/03/16 01:11:40.10 Tb17X3fe.net
typeScriptと相性かいいフレームワークってどんなのがあります。?
vue.jsと比べるとreactはかなり良さ気なんですが

283:デフォルトの名無しさん
16/03/16 13:03:38.46 /Zyxq7hl.net
Angular2かな
まだベータ版だけどTypeScriptとの親和性は抜群というかAngular2自体がTypeScriptで作られてる
だから*.d.tsが要らない
あと最終的にはテンプレート文字列内まで補完が効くようになるらしい

284:デフォルトの名無しさん
16/03/17 02:25:53.34 ybZd+XDK.net
namespaceとmoduleの違いが分かりません。
ほとんど同じようなものだと思ってもいいですか?

285:デフォルトの名無しさん
16/03/17 09:53:47.06 U5XyTqUO.net
>>272
googleとmsの共同作品みたいなものですね。
reactと比較してのメリットはフルスタックなところですね�


286:[。 facebookもflowとか独自にやらずにtypeScript使ってくれればいいのに。 デメリットは学習コストなんですよねー。正直angular1で挫折したので、、、、 typeScript作のフレームワークとかライブラリって他に何がありますかねー?



287:デフォルトの名無しさん
16/03/17 10:41:50.84 FCgg2gkL.net
>>273
最初はmoduleしかなかったがTypeScriptのmoduleはJavaScript界隈のモジュールと
違ってnamespaceに近いものだから、後からmoduleの別名でnamespaceが追加された
要するに全く同じもの
そしてmoduleはobsoleteな感じだったが、1.8でまた蒸し返された感じだな

288:デフォルトの名無しさん
16/03/17 10:48:46.56 ybZd+XDK.net
>>275
解説ありがとうございました。スッキリしました。
>1.8でまた蒸し返された感じだな
なぜそんなに迷走しているのですか?

289:デフォルトの名無しさん
16/03/17 11:30:44.99 FCgg2gkL.net
>>276
言い方がまずかったかもしれん…迷走ではない
Ambient Modulesと呼ばれている機能が少し拡張されただけだ
moduleと1.8で拡張されたdeclare moduleは似てはいるが別モンと考えた方が良かったな
ただのmoduleはnamespaceに置き換えた方が誤解が少なくていいと思うが
declare moduleはモジュール定義を書くものだから必要なものだった

290:デフォルトの名無しさん
16/03/17 14:17:48.80 LtlKgYTa.net
playgroundから補完効くの気持ちいいんですけど、
外部ライブラリも取り込めるタイプのやつって無いですかね?

291:デフォルトの名無しさん
16/03/17 19:50:11.64 ybZd+XDK.net
URLリンク(stackoverflow.com)
にある例
interface Array<T> {
  remove(o: T): Array<T>;
}
Array.prototype.remove = function (o) {
  // code to remove "o"
  return this;
}
のようにして配列に対してremoveというのを追加したいのですが、実際にやると
Property 'remove' does not exist on type 'any[]'
と出ます。何がおかしいでしょうか?
VS2015のTypeScriptです。

292:デフォルトの名無しさん
16/03/17 21:18:45.36 FCgg2gkL.net
>>279
呼び出してるとこも書かないとそれだけじゃ分からん

293:デフォルトの名無しさん
16/03/17 23:01:06.58 ybZd+XDK.net
>>280
呼び出す以前に、
Array.prototype.remove = function (o) {
        ^^^^^
このremoveの部分で上記のエラーメッセージが出ます。
もし理由や対策が分かれば教えて下さい。

294:デフォルトの名無しさん
16/03/17 23:19:57.85 2Htg2ogu.net
>>281
Playgroundなら動くように見えるが、これでいいのか?
URLリンク(tiny.cc)
tscのバージョンとかビルドオプションにも関係するかもしれない。
型チェックを厳しくすると文句を言われる気がする。
その場合は any にキャストして黙らせるんだろうけど。

295:デフォルトの名無しさん
16/03/18 01:21:57.61 xSPdqn8L.net
>>282
サンプルありがとうございます。
何故かVSだとエラーするんですよね。

296:デフォルトの名無しさん
16/03/18 08:30:08.17 lH6dzSdk.net
>>283
君は基本的な姿勢が身についていない
・質問をする場合は、再現可能なコード片を添付せよ
・エラーを特定し、メッセージを加工せずに報告せよ
>>279 だけ見ると、使用時にエラーがあるように読めるが
>>281 では、実装時にエラーがあるように読める(エラー内容は不明)
こんなことでは他人の手を煩わせるだけだ

297:デフォルトの名無しさん
16/03/18 09:44:04.92 UW/nCw4W.net
>>279
そのインターフェースが他のソースから見える状態じゃないとエラーになるし
prototypeへの実装も他のコードよりも先に行われないと実行時エラー
そのメッセージだと前者のようだけどな

298:デフォルトの名無しさん
16/03/18 13:56:17.03 +/FU+lPG.net
>>274
フレームワークと言えばUWP(ユニバーサルWindowsプラットフォーム)もあるな
TypeScriptでUWPを作るのは情報が少ないけど同じMSだから手厚いサポートがあるはず

299:デフォルトの名無しさん
16/03/19 10:14:16.49 iKSB+QiN.net
>>286
JavaScript/HTMLでUWP作れるから問題は無いんじゃない?
(UWPが流行るかはともかく)
VS2015ではまだプロジェクトテンプレートが無いけど、次期版には追加されるでしょ

300:デフォルトの名無しさん
16/03/19 12:41:33.04 MNmjmgAA.net
>>287
UWPってqiitaを観た感じはやっていていないけど、
UIをXMLっぽくつくりこめるってやつならReactNativeでいい気がする。

301:デフォルトの名無しさん
16/03/21 08:15:39.14 O7DG3syI.net
typeScriptでVSCのextension作りたいんですけど
動作の挙動を見るのに既存のextensionをデバッガで動かしています。
でもVSC自体がそのextensionを使っているとバッティングして上手く動かないので
別プロファイルみたいにして動かしたいんです。
でも、そういう起動オプションが見つからなくて困っています。
お助け下さい。

302:デフォルトの名無しさん
16/03/22 00:21:22.49 uAieVvDE.net
typeScriptのOptional型ってswiftのそれとは全然違うような。
interfaceのメンバにしか?使えないの?
返却値もoptional使いたい

303:デフォルトの名無しさん
16/03/22 01:42:45.61 gYAdXehO.net
>>290
Swiftとは違うね。単に省略を許すだけ。
TypeScriptではすべての変数がOptional型といえる。
numberを返すと宣言した関数からでも、nullとundefinedは返せてしまう。
ロードマップにある 2.0 Non-nullable types が導入されればマシになるとは思う。

304:デフォルトの名無しさん
16/03/22 13:37:01.50 r8fC7r2k.net
--strictNullChecks 一発でデフォがNon-nullableになるのは助かる
--noImplicitAny --noImplicitReturns と必須オプションがまた増えたな

305:デフォルトの名無しさん
16/03/22 17:31:59.65 DpQ/EBxZ.net
nullやundefinedを許していない状況で
省略可能引数にnullチェックが必要になるのは少し変な気がするから使わなさそう

306:デフォルトの名無しさん
16/03/22 17:40:46.01 uAieVvDE.net
>>292
なるほどオプションで有効になる感じですね。
早く試してみたいです。
でも外部ライブラリとの整合性をどうするのか気になります。
swiftだと!がついているImplicitly Unwrapped Optional型とかいうのになって
明確に危険な型だと分かるようにしてますけど、typeScriptも似たようなものになるんでしょうか?

307:デフォルトの名無しさん
16/03/22 18:03:22.23 gYAdXehO.net
フロー解析をするようになってきているから
use(x) はエラーになって
if (x != null) { use(x) } はエラーにならない
くらいのことをやってくれるはず。Swiftの!型に対応するものは要らない。

308:デフォルトの名無しさん
16/03/22 21:46:36.58 r8fC7r2k.net
>>293
hoge?: number, じゃなくて hoge = 0, とかにすれば別にnullチェック要らないじゃん
で、
interface {
 hoge?: number

function func(hoge?: number)

両方共nullableかつ省略可能で hoge: number? だと省略不可でnullableと考えると
一貫していて結構いいじゃない

309:デフォルトの名無しさん
16/03/22 21:49:41.79 r8fC7r2k.net
let hoge: number?;
とletの場合は省略するという考えがないからnumber?でnullableということだな

310:デフォルトの名無しさん
16/03/22 21:53:50.90 uAieVvDE.net
>>295
ありがとうございますちなみにそのフロー解析はドコまでやってくれるんでしょうか?
例えばtypeScript上で書いたFuncAがあって
let a= FuncA()
use(a)
みたいにFuncAの中で返却値がnullチェックされていれば
上記のようにnullチェック無しで使えるんでしょうか?

311:デフォルトの名無しさん
16/03/22 22:18:13.97 gYAdXehO.net
>>298
まだリリースはされていないからわからないよ。期待はしているけど。
その例なら function FuncA(): Foo? か : Foo か、関数の返値の宣言を見るのが自然じゃない?
FuncAの実装の中まで追うことはないだろうし、するべきではないとさえ思う。
それにしても、省略可能な引数の書き方ってどうなるんだろう?
function func(hoge?: number?) ← 厳密だが、?を2個も書くの?
function func(hoge?: number) ← 言葉通りだとnon-nullableなのにundefinedになりうる?
function func(hoge: number?) ← nullは渡せるが省略できない?

312:デフォルトの名無しさん
16/03/22 22:43:28.85 BfQhAJB6.net
皆さんどういう環境でtypescriptやっているのですか?
winのvisual studioは少数派かな?

313:デフォルトの名無しさん
16/03/23 11:41:36.25 oLR8GLsF.net
引数が省略されたかどうかを調べるための構文がないと不自然だな
hoge == nullみたいに使わないはずのキーワードが出てくるのはやっぱり変

314:デフォルトの名無しさん
16/03/23 13:40:01.83 s9X+rvra.net
>>301
だからNon-nullableがデフォだからって絶対nullが出てこないわけじゃないでしょ
DOMだのWebAPIは普通にnullを返すし自前の関数だってnullとかundefinedを返したいことは普通にある
それと引き数の省略には func(hoge = -1) とかにすればいいんだよ

315:デフォルトの名無しさん
16/03/23 14:26:23.62 2mxU+x1U.net
URLリンク(qiita.com)
上記記事でtypeScriptディスられているんですが、
> 最近のTypeScript は動作環境のロックインが多くなりつつあり、またコンパイル後のJSはedgeで動くからこれでいいんだ、というMSの姿勢が若干透けて見えて、ちょっと距離を置きたい気分です。
というのは本当なんでしょうか?
具体的にどういうものがあるのか知りたいです。

316:デフォルトの名無しさん
16/03/23 15:06:32.16 0dLy2K+b.net
jsあるいはtsに
nullとundefinedが有りますが、nullだけで十分だと思うんですが皆さんそう思わない?

317:デフォルトの名無しさん
16/03/23 16:16:09.46 +D1Yzwu/.net
>>303
っ「要出典」
es5モードならほとんどのブラウザで動くし、es6だとEdgeでさえ動かない。node用。
一時期 async/await を強く推していて、.NET系言語、ES、Python にまで採用させた
(良く言えば、開発に協力した)のは、煙たがられていた印象はある。

318:デフォルトの名無しさん
16/03/23 16:20:06.05 s9X+rvra.net
機能的にundefinedで名前がnullのが1つあればよかった
nullはJavaScriptの癌と言える
TypeScriptのコーディングスタイルにもnullは使うなと書いてあるし
tslintでも警告を出せるからnullはもう使わないようにすべき

319:デフォルトの名無しさん
16/03/23 16:42:09.62 +D1Yzwu/.net
>>304
JSだとさらに「undefinedを保持」と「未定義」の区別がある場合も。
「不在」と「不明」は別という考え方もあったが、結局、一般人には使いこなせなかったんだろう。
ちなみにLuaはnilしかなく、nilを代入するとJSのdelete演算子になるんだが、
「保持できるnil」(キーとしては残る)のためにnullが欲しいという話もたまに出る。
何が最良かは難しいところだな。

320:デフォルトの名無しさん
16/03/23 16:55:04.92 4qmKzsXk.net
return 'undefined';

321:デフォルトの名無しさん
16/03/23 17:35:37.11 2mxU+x1U.net
interface A {
a:string
}
interface B {
b:string
}
interface C {
c:string
}
type Hoge = A|B|C

すいません。上記のような


322:Hoge型があったとして Hoge型をA,B,Cの何れかのinterfaceに合致するかテストする方法ってどうすればいいんでしょうか? できれば各interfaceのメンバに触れずに確認したいのですが、、、、



323:デフォルトの名無しさん
16/03/23 23:04:51.01 +D1Yzwu/.net
>>309
無理でしょう。TypeScriptのinterfaceはコンパイル後には何の痕跡も残らない。
実行時にはinterface由来の型情報は使えない。

324:デフォルトの名無しさん
16/03/24 14:14:40.73 v9bzQn8L.net
TypeScriptはコンパイル時にはinterfaceを認識してるはずだが
コードでそれをチェックする術がないな (今後も追加される事は絶対ないだろうが)
しかしinterfaceのどれかに合致するかっていう考え方ちょっと違うな
例えば
interface A {
 a:number
}
interface B {
 b:string
}
があれば
{
 a:1,
 b:


325:"hoge" } はどっちにも合致する訳だから、コンパイルが通ればどれか(または両方)のinterfaceに合致してる と判別が出来るってだけのものだよ



326:デフォルトの名無しさん
16/03/24 17:51:19.94 QUxdzUzn.net
chromeでデバッグできますか?

327:デフォルトの名無しさん
16/03/24 18:45:20.46 bRX025wQ.net
>>312
.js にコンパイルするときに Source Map を出力できる。
それ以上のデバッグについては開発環境スレでどうぞ。

328:デフォルトの名無しさん
16/03/25 02:00:24.75 G+z1ebGz.net
>>312
weboack使ってるけどなんの問題もなくtsファイルにbreakpointが貼れる

329:デフォルトの名無しさん
16/03/25 02:00:53.64 G+z1ebGz.net
>>314
webpackです。typo

330:デフォルトの名無しさん
16/03/25 12:36:24.15 Ib2txsDS.net
>>314
iisサーバーは?

331:デフォルトの名無しさん
16/03/27 23:00:49.72 FjCKG/3R.net
typeScriptでWeakMapっていつから使えるようになるんですか?
ES2015から使えるものっててっきりtypeScriptでもつかえるものかと

332:デフォルトの名無しさん
16/03/28 14:50:43.22 6ufq8Y0K.net
--target ES6にすれば使えるっていうかそれぐらい察しろ

333:デフォルトの名無しさん
16/03/28 19:56:00.22 YM89lTlN.net
>>318
えっ。それっておかしくないです?
typeScriptって基本 ES2015 + 型なのかと。
アロー関数は標準でサポートしといてWeakMapは対象外ってどういうことなの

334:デフォルトの名無しさん
16/03/28 21:20:10.15 K6EkYblL.net
>>319
構文糖で対応できる機能は対応している
JavaScriptエンジンが対応してくれないとどうしようもない機能は無理
それぐらい察しろ

335:デフォルトの名無しさん
16/03/29 00:12:34.26 clo72TFv.net
>>320
なるほど。てっきりtargetって出力するjsコードの対応バージョンでしかなくて、
typeScriptの仕様自体はどのtargetでも変化しないと思い込んでました。
つまりES2015のpolyfillの役割も果たしてくれるとばかり思っていました。
ありがとうございます。

336:デフォルトの名無しさん
16/03/29 10:54:45.27 NGEgZfA0.net
>>321
基本TypeScriptはES2015のpolifillだと思っていいけど
単に少ないコードで実装出来るものしか対応してないだけだ
__extendsとか__decorateとかね
2.0でasync/awaitもES5で使えるようになるけど、もしWeakMapを対応したら
巨大なコードが*.jsの頭に引っ付くことになるけどそんなの嫌だろ

337:デフォルトの名無しさん
16/04/05 23:45:55.11 nWoaZGhX.net
JavaのNashornにrequire関数組み込んでTypeScript使えるようにしたが結構楽しいわ
letの暗黙リネームが実行時に何か不具合起こすんじゃないかと少々気になる

338:デフォルトの名無しさん
16/04/06 20:01:43.86 NydnT1H+.net
>>323
letが導入されてから1.8になるまでforループ内でlet使うと特定の条件で実行時エラーを起こしてた
1.8で修正されたから古いバージョンの場合は気を付けた方がいいけど1.8以降は不具合なんて起こさないはず

339:デフォルトの名無しさん
16/04/11 23:59:54.54 /4tKcoWK.net
typescript初心者です。
Visual Studioで、
module mod {
function func() {
alert('func');
}
}
が、
var mod;
(function (mod) {
function func() {
alert('func');
}
})(mod || (mod = {}));
になるのですが、分からないのは、
(mod || (mod = {}));
の部分です。
これは何でしょうか?
どなたか解説お願いいたします。あるいはヒントなどお教えください。

340:デフォルトの名無しさん
16/04/12 00:19:14.57 ep3rTpAI.net
>>325
mod 変数が定義済みなら再利用 or 無ければ新規の空オブジェクトを使う。
複数の場所で mod モジュールが定義される場合に、内容をマージすることになる。

341:デフォルトの名無しさん
16/04/12 00:20:23.42 L6C4Yo9J.net
(A || B)はAもしくはBが偽じゃなければその内容(結果)を返す特性があって



342:単純に言うとmodが空ならオブジェクト代入して無名関数に渡すよってこと



343:デフォルトの名無しさん
16/04/12 00:47:40.67 X3YsmN+g.net
>>326 >>327
解説ありがとうございました。だいぶ分かってきました。
もう一つ教えて下さい。
二つのtsファイル
----------------
// file1.ts
module mod {
  function func1() {
    alert('func1');
  }
}
----------------
// file2.ts
module mod {
  function func2() {
    alert('func2');
  }
}
----------------

344:デフォルトの名無しさん
16/04/12 00:48:40.40 X3YsmN+g.net
から生成される二つの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ファイルを一つのファイルに連結したいのですが、エラーが出て行き詰っています。
こういうやり方は間違いですか?

345:デフォルトの名無しさん
16/04/12 10:30:36.29 ep3rTpAI.net
>>329
連結する順番でエラーになることはある。
特にグローバルスコープ(関数の外)で処理が走る場合かな?
tslint を入れて no-use-before-declare (宣言前に使うと警告) で
チェックする手はあるかもしれない。

346:デフォルトの名無しさん
16/04/12 12:30:46.37 MBVppC7j.net
>>330
情報ありがとうございました。
調べてみます。

347:デフォルトの名無しさん
16/04/12 21:56:30.51 aXmXxCLh.net
TypeScript 2.0プレビュー
URLリンク(www.infoq.com)

348:デフォルトの名無しさん
16/04/13 16:45:42.60 xgAfpouO.net
おおって思ってchannel9の動画見てみたらマイクロソフトの人が未だにtsd
使ってデモしてたんだけどtsd非推奨じゃなかったんかい

349:デフォルトの名無しさん
16/04/13 16:56:49.53 xgAfpouO.net
面白いねTypeScript2.0
undefinedとnullはそれぞれ独立した型になって
let a: number|null|undefined
みたいに宣言するようになるのか

350:デフォルトの名無しさん
16/04/13 22:27:08.77 JKiuLOht.net
voidでよくね

351:デフォルトの名無しさん
16/04/14 12:17:58.56 ea0e/BMW.net
C#のvirtual,overrideも実装してくれよ
issueには何度かあがってるけどその度に否定されてんだよな、何でだ

352:デフォルトの名無しさん
16/05/01 13:04:39.03 tKi6j9CT.net
匿名通信(Tor、i2p等)ができるファイル共有ソフトBitComet(ビットコメット)みたいな、
BitTorrentがオープンソースで開発されています
言語は何でも大丈夫だそうなので、P2P書きたい!って人居ませんか?
Covenantの作者(Lyrise)がそういう人と話したいそうなので、よろしければツイートお願いします
URLリンク(twitter.com)
ちなみにオイラはCovenantの完成が待ち遠しいプログラミングできないアスペルガーw

The Covenant Project
概要
Covenantは、純粋P2Pのファイル共有ソフトです
目的
インターネットにおける権力による抑圧を排除することが最終的な目標です。 そのためにCovenantでは、中央に依存しない、高効率で検索能力の高いファイル共有の機能をユーザーに提供します
特徴
Covenant = Bittorrent + Abstract Network + DHT + (Search = WoT + PoW)
接続は抽象化されているので、I2P, Tor, TCP, Proxy, その他を利用可能です
DHTにはKademlia + コネクションプールを使用します
UPnPによってポートを解放することができますが、Port0でも利用可能です(接続数は


353:少なくなります) 検索リクエスト、アップロード、ダウンロードなどのすべての通信はDHT的に分散され、特定のサーバーに依存しません 4



354:デフォルトの名無しさん
16/05/01 20:44:35.23 sHMevs8d.net
Visual Studio Comm. 2015でTypeScript 1.7.4.0を使ってます。
プロジェクトをビルドしてデバッグしても変更が反映されなくなりました。
仕方なく新しいプロジェクトを作ってソースを移動させているのですが、対処法はありますか?

355:デフォルトの名無しさん
16/05/01 21:13:58.28 1U34S4Ix.net
>>338
>変更が反映されなくなりました。
何の変更がどこに反映されないん?
tsからjsが自動生成されないと言う意味?
もしそうならtsに文法エラーが有るんじゃないか?

356:デフォルトの名無しさん
16/05/02 10:47:24.02 H1b5QbBD.net
レスありがとうございます。こんなに早く反応があるとは思いませんでした。見逃してしまって申し訳ないです。
>何の変更がどこに反映されないのか
ソースコードの変更です。
ビルドして実行してもjsが前回のビルドのままで困っていました。
>tsからjsが自動生成されないと言う意味?
>もしそうならtsに文法エラーが有るんじゃないか?
仰る通り文法エラーがあったみたいです。今では正常に実行できています。ご迷惑をおかけしました。
それにしても間違ったコードを書いてもビルドエラーにはならないんですね……。
これではどこでミスったかチェックしにくい。

357:デフォルトの名無しさん
16/05/02 16:08:44.94 WvgoLY0A.net
「新しいプロジェクトを作ってソースを移動させ」たらうまくいくのだがという話じゃなかったのか

358:デフォルトの名無しさん
16/05/03 07:37:48.31 llYnk/DC.net
「新しいプロジェクトを作ってソースを移動させたらうまくいく」ケースは俺も何度か経験したことがあるなぁ
しかも>>338と違ってコンパイルエラーは発生していない
ビルドして実行してもjsが前回のビルドのままってところまでは一致してるんだよな
(そもそもビルドできないのだが)

359:デフォルトの名無しさん
16/05/09 17:02:14.42 pzKdLl0R.net
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にも修正をしなくてはならないので困るのだが。

360:デフォルトの名無しさん
16/05/09 17:17:18.07 8SRbjrMh.net
既存のファイルを追加すれば参照してくれるでしょ
プロジェクト以下に収めなきゃいけない理由がないなら
common, proj1, proj2と横並びにすればいい

361:デフォルトの名無しさん
16/05/09 17:28:41.05 pzKdLl0R.net
>>344
レスありがとうございました。
既存のファイルを追加すると、そのコピーが追加されるので、結局343 で
説明したようなファイル構造になります。
困っています。

362:デフォルトの名無しさん
16/05/10 15:04:25.21 /c+E/E1d.net
だれも分からないの?

363:デフォルトの名無しさん
16/05/10 15:34:09.22 FvQx+NTV.net
VSでTypeScriptやってる人が少ないんでないの?
CとかC++を一緒にやってる人じゃないと最近の人はVSCodeを使うだろうし

364:デフォルトの名無しさん
16/05/10 18:31:49.18 /c+E/E1d.net
>>347
VSCodeだと343のような状況はどうなるの?
共通部分は一元管理が出来るの?

365:デフォルトの名無しさん
16/05/10 22:20:05.90 ygHcjv1V.net
私もやり方知りたいが分からんのでスタティックリンクにしてるがそれじゃ駄目?

366:デフォルトの名無しさん
16/05/10 22:23:56.70 /c+E/E1d.net
>>349
windowsでスタテクリンク出来る?

367:デフォルトの名無しさん
16/05/10 22:31:47.62 ygHcjv1V.net
ジャンクションでググて

368:デフォルトの名無しさん
16/05/10 22:34:19.65 LhMpTcEU.net
>>343
思想的には commonA/B を独立したプロジェクトにしてモジュールとして再利用するんだろうな。
こっそり同一ファイル扱いにするならファイル or フォルダをシンボ


369:リックリンクにするか。 これと似たようなものだが、昔は svn:externals を使ったこともあったな。



370:デフォルトの名無しさん
16/05/11 21:11:57.56 b7E4GV28.net
WindowsXPはハードリンクが出来るようになって便利だからフォルダをハードリンクにしたんだ
で、リンクした方が不要になったからごみ箱に入れたんだ
まだ、元のフォルダ内はなんともなかった
暫くたってごみ箱を空にしたんだよ
そしたら元のフォルダ内のファイルが全部消去されちまったんだよ!当然ごみ箱にも無い
要するにWindowsでフォルダをハードリンクすんなって事

371:デフォルトの名無しさん
16/05/11 22:31:42.85 3ijDNnlQ.net
ジャンクションでも似たような問題あるのか、、
URLリンク(d.hatena.ne.jp)
いまはどうなんだろう

372:デフォルトの名無しさん
16/05/12 18:40:46.37 jzt1qSkA.net
>>353
Windowsってフォルダのハードリンク作れたっけ?

373:デフォルトの名無しさん
16/05/14 11:35:56.64 r8zKr16p.net
そもそも別物なのに同じ挙動をすると期待するのが間違い

374:デフォルトの名無しさん
16/05/14 11:46:02.57 fLeelvLJ.net
XPでもジャンクション使えたけど
MSの態度が曖昧でどうしたいのかわからなかった
Vista でこの辺のファイルリンクとか代替ストリームとか正式サポートされた

375:デフォルトの名無しさん
16/05/16 19:25:09.47 xXNLqPYG.net
>>355
XPの時はフォルダのハードリンクは作れたよ。今は知らん
Linuxはフォルダ(ディレクトリ)のハードリンクはroot権限が必要になるな
OS問わずにフォルダのハードリンクは危険ってことだ
XPはシンボリックリンクが無くてハードリンクのみだから罠に嵌められた
Vista以降はシンボリックリンクが使えるからそっちは特に問題はないはず

376:デフォルトの名無しさん
16/05/16 21:06:35.83 0jMm0VW7.net
XPの時はフォルダのハードリンクは作れん。XP現役で使っている。
異なるドライブでも可能なジャンクションならできる。

377:デフォルトの名無しさん
16/05/17 11:18:29.53 NWTAtPGB.net
>>359
もれも 358 はパーティションをフォルダにリンクする話と間違ってるなーと思ってみてた

378:デフォルトの名無しさん
16/05/17 11:19:25.01 NWTAtPGB.net
リンクっつーよりマウントだな

379:デフォルトの名無しさん
16/05/17 13:37:15.22 vW2/638O.net
358だけど何らかのコマンドでリンクを作成したのは間違いないが
調べてみるとlinkd.exeの可能性が高い
要するにジャンクションって事か?
なにぶんXP使ってたのはかなり昔の事なんで記憶が曖昧だったよ

380:デフォルトの名無しさん
16/05/17 13:54:39.38 awF8sDTJ.net
Linuxでもディレクトリのハードリンクはできなかったはず。
URLリンク(unix.stackexchange.com)
>>358 のroot権限うんぬんは、Solaris限定かもしれない。
Windowsでも記事がある。今ならmklinkだけでいい。昔はfsutilなりlinkdなりもあった。
URLリンク(www.atmarkit.co.jp)
フォルダのハードリンクはできないから >>353 も用語違い。
まぁ、ジャンクション+ごみ箱が多くの不幸な事故を生み出したのはその通りだが。

381:デフォルトの名無しさん
16/05/17 14:37:13.73 74/nDTTZ.net
そんな事より元々の質問の答えは無いの?
俺も知りたい。共通ライブラリ化出来ないと不便だよな。

382:デフォルトの名無しさん
16/05/17 15:17:02.05 awF8sDTJ.net
そんな事より元々の質問をVisual Studio 2015のスレで聞け。
簡単な回答は >>344 >>352 で既出。
VS2015のUIだとファイルのコピーが作られるのが問題なのだろうが
*.csproj を直接テキスト編集すれば上位フォルダのパスも扱えるようには見える。
Include="..\xxx"

383:デフォルトの名無しさん
16/05/31 14:0


384:0:10.58 ID:DKR1hPoU.net



385:デフォルトの名無しさん
16/05/31 14:31:56.32 xl+n8Rkn.net
知らないものを始めたいときは、とりあえず「○○ 入門」でぐぐれ

386:デフォルトの名無しさん
16/06/01 22:34:33.37 tjGnKxey.net
ms謹製なので、msのツールが使えそう

387:デフォルトの名無しさん
16/06/04 18:08:24.21 3F7VjM1T.net
VSで作っているけど
#region
#endregion
的な物ない?

388:デフォルトの名無しさん
16/06/04 19:51:23.66 BRPGaK18.net
>>369
無い

389:デフォルトの名無しさん
16/06/04 21:45:06.08 dGWHMJs+.net
>>370
ありがとうございます!

390:369
16/06/04 22:49:04.19 3F7VjM1T.net
>>371
お前誰?

391:デフォルトの名無しさん
16/06/04 22:49:50.74 3F7VjM1T.net
>>370
ないんですね
ありがとうございます

392:デフォルトの名無しさん
16/06/04 23:36:31.88 o/6G/bzU.net
>>369
Proposal: Preprocessor Directives
URLリンク(github.com)
プリプロセスの提案はあるよ
でもこれに限らず、C#にある仕様だからといって優先的に取り組む感じはしないかな
節度を持ってJS文化に適合させていきたいのかもね

393:デフォルトの名無しさん
16/06/04 23:55:44.04 Ly/Eq9zA.net
プリプロセスなんてコンパイラだからこその機能なのにTypeScriptの設計者は
若干偏屈なところがあるよな
abstractは導入しといてvirtual,overrideがいらねーとか意味が分からん

394:デフォルトの名無しさん
16/06/05 18:43:32.96 sRhznVmp.net
色々入れすぎるとまたアンチM$(笑)から叩かれそう

395:デフォルトの名無しさん
16/06/10 22:29:38.27 L2JcFKfv.net
>>375
overrideは入りうるよ
一度は断ったけど、最近になって再検討して受け入れることにしたようだ
Support override keyword on class methods
URLリンク(github.com)

396:デフォルトの名無しさん
16/06/10 22:52:16.31 E+nifBZa.net
>>377
お、375じゃないけど超うれしい

397:デフォルトの名無しさん
16/06/16 19:04:16.91 PJUBR4L+.net
The Future of Declaration Files
URLリンク(blogs.msdn.microsoft.com)
関連
npmでTypeScriptの型定義を管理できるtypesパッケージについて
URLリンク(qiita.com)

398:デフォルトの名無しさん
16/07/15 00:06:52.35 3lt2T5b1.net
Announcing TypeScript 2.0 Beta
URLリンク(blogs.msdn.microsoft.com)
TypeScript 2.0 Beta 変更点
URLリンク(qiita.com)

399:デフォルトの名無しさん
16/07/15 00:10:10.35 3lt2T5b1.net
15K行のアプリをTypeScript1.8から2.0に移行してみた
URLリンク(rhysd.hatenablog.com)

400:デフォルトの名無しさん
16/07/17 11:23:12.55 cN3YyD0v.net
ES3対応ってまだいるの?

401:デフォルトの名無しさん
16/07/18 16:13:28.10 jfk77b+M.net
URLリンク(github.com)
TypeScript  ★13,201
CoffeeScript ★13,152
遂にGithubスター数がCoffeeScriptを超えた

402:デフォルトの名無しさん
16/07/19 12:58:14.30 HIwcb2q8.net
比べる事に意味があるとは思えんがな…
CoffeeScriptはAltJSでTypeScriptはBetterJSだ
JavaScriptが嫌いな人はCoffeeScriptを使えばいいんだ

403:デフォルトの名無しさん
16/07/24 15:50:35.09 5+wwO3kQ.net
Intellij IDEAでTS開発捗りすぎワロリンヌ

404:デフォルトの名無しさん
16/07/26 06:50:53.34 HN1KCMsQ.net
JavaScriptとTypeScriptの関係は
C言語とJavaの関係に似


405:ている様な気がする



406:デフォルトの名無しさん
16/07/26 07:58:39.74 l+RwS+H8.net
>>386
だから何よ?

407:デフォルトの名無しさん
16/07/26 15:46:52.18 iOw6CH/m.net
プロトタイプベースは人類には早すぎたんだ
クラスベースでないと万人には理解できない

408:デフォルトの名無しさん
16/07/26 16:29:48.15 GAZIoYVE.net
プロトタイプベースは既存のインスタンスから継承できる先進的な機能ではあるが
そもそも他の言語では隠されてる継承の仕組みがむき出しになってるだけなんで
無理に使う必要もない
クラスを作るイディオムとか普通にclassを使えばいいんだ

409:デフォルトの名無しさん
16/07/27 06:57:54.53 Pn9H7j+u.net
>>387
歴史は繰り返す

410:デフォルトの名無しさん
16/07/27 13:58:29.20 lrmpmMbD.net
WebAssemblyは当面C++のゲーム用だけどDOMもいじれるようになる予定だから
そうなるとまたWeb用言語の勢力図は変わるかもしれないな
Webの世界に安定は無い

411:デフォルトの名無しさん
16/07/27 14:22:46.06 5Q3W/uen.net
デバッガが当分クソそうだけどWebKitはそのうち充実させて生JS殺しにきそう

412:デフォルトの名無しさん
16/07/27 23:47:21.54 Bmh+9kmU.net
>>386
CとC++じゃね
統一言語の上位互換で、元々はトランスパイラだし

413:デフォルトの名無しさん
16/07/28 06:25:04.12 jPXeBRxR.net
FunScriptでもやるか

414:デフォルトの名無しさん
16/07/28 19:15:17.96 O8Vfrh0P.net
>>393
LLVMじゃね

415:デフォルトの名無しさん
16/07/29 10:57:47.10 eqy9GKk1.net
2.0のstrictNullChecksへの対応は結構キツイなぁ
「フィールドAがあれば、フィールドBも必ずある」ような暗黙ルールを咎められる
「変数?」が「型 | undefined」の扱いになるから
無効な値にはnullを使わずundefinedで統一したほうが良さそうだ
構文としては、返値、ローカル変数、末尾以外の引数にundefinedを許したい場合
いちいち「| undefined」が必要になる。Swiftのように ? は型の側が良い気がするんだが

416:デフォルトの名無しさん
16/07/29 14:56:44.05 LtIoC4Yb.net
undefinedはプロパティそのものが存在しないことを表すんだからプロパティ側に?付けるのは自然でしょ
2.0は個人的にはかなり好きだな
最近の新言語といえばWeb系のノリで適当に作られてるのが多い中、これほど思想が明確で一貫した言語は珍しい

417:デフォルトの名無しさん
16/07/29 16:06:58.19 eqy9GKk1.net
「存在しない」と「undefinedを保持している」の2つの意味があるからなぁ
前者ならプロパティの属性、後者なら型の属性に解釈できるように感じる
strictNullChecksは簡単には対応できなかったが
noImplicitThis, noUnusedLocals, noUnusedParameters は
影響が少ないわりにバグを拾ってくれてありがたかった

418:デフォルトの名無しさん
16/07/29 23:41:16.66 rRyJkXWQ.net
>>398
JavaScriptはundefineって言われても本当にundefinedなのか意図的に設定したundefinedか判別不能だから
nullとundefinedを区別する意味があるけど、TypeScriptの場合は「存在しない」なんて有り得ないからnullは要らない子だし
undefinedの場合は意図的に設定したと分かる

419:デフォルトの名無しさん
16/07/30 00:18:48.03 tmproLvF.net
ノードの有無のチェックは存在を確認するし番兵は一般的にnullを使う
前者はプロパティで後者は型だろう

420:デフォルトの名無しさん
16/07/30 08:46:23.50 d/v3ZRhl.net
F#「あなたはヌルチェックでどれほど人生を無駄使いしているかを知るべきである」

421:デフォルトの名無しさん
16/07/30 13:20:14.13 NnN7Vre0.net
===を使えば全部解決

422:デフォルトの名無しさん
16/07/30 23:28:44.49 r21OKS05.net
"型?" については "| null"、"| undefined"、その両�


423:福フ どれにすべきかで議論がまとまらなかったみたいだ しばらくは採用されないだろう https://github.com/Microsoft/TypeScript/issues/7426 https://github.com/Microsoft/TypeScript/issues/7488



424:デフォルトの名無しさん
16/08/01 14:04:09.45 FziUxCeM.net
>>400
DOMとかWebGLとか普通にnullを返すからどうしてもnullを使わないといけない場面は出てくる
けど、TypeScriptだけの処理の場合はnullを使う意味は全く無いな
本家のコーディングスタイルにもnullじゃなくundefinedを使えと書いてある

425:デフォルトの名無しさん
16/08/01 18:46:01.78 2iI0/+FF.net
JavaScriptの根幹にある設計ミスだからな
トランスパイラの層ではその尻を拭うのも難しかろう

426:デフォルトの名無しさん
16/08/01 19:32:59.87 RWxbqWQ0.net
>>404
知ってるけど命令型アルゴリズムを書くときにわざわざnullをundefinedに置換するほどのメリットもない
教科書通りnull使ったほうが思考のオーバーヘッドがなくて楽
どちらでもいい時はundefinedに寄せる

427:デフォルトの名無しさん
16/08/01 22:13:22.57 cFMFBdlm.net
Suggestion: Extension methods
URLリンク(github.com)
初期から提案のあった拡張メソッドだが、不採用が決まった

428:デフォルトの名無しさん
16/08/02 00:27:46.69 EfYzXtbg.net
型の有無で動作が変わるのはTypeScriptの設計思想からして不適切

429:デフォルトの名無しさん
16/08/02 12:10:13.85 rXn2IC8I.net
クラス定義には含まれないプロパティをインスタンスが持てる言語で
そもそも拡張メソッドが成り立つものなのかね?
Java interfaceのdefaultメソッドのほうがまだ芽がある気がするが

430:デフォルトの名無しさん
16/08/02 17:21:45.08 04yi8jv3.net
>>406
教科書って何だよ
俺たちの教科書はTypeScript公式のドキュメントだけだ

431:デフォルトの名無しさん
16/08/02 18:37:46.13 +e4iDA+F.net
>>410
アルゴリズムの本じゃね?

432:デフォルトの名無しさん
16/08/03 00:12:57.56 jr+ageRA.net
nullかどうか判定するのに
hoge === null
とかやってないよな?
!hoge
で統一すればundefinedのみで何の問題も無い

433:デフォルトの名無しさん
16/08/03 01:16:56.62 Ot1v5VqO.net
これはひどい釣り

434:デフォルトの名無しさん
16/08/03 08:01:27.31 8fjgpLNn.net
数値と文字が渡されないケースなら ! でも良い
渡されるなら == null (2個) を使う
TSLintの設定で、比較で null を使うのは許して、値としては許さないのが欲しいな

435:デフォルトの名無しさん
16/08/03 12:08:49.21 mbys/AN5.net
null汚染

436:デフォルトの名無しさん
16/08/03 14:40:42.74 3251V7HB.net
>>413
お前がど素人なのはわかったよw

437:デフォルトの名無しさん
16/08/03 17:20:15.41 3251V7HB.net
>>413,414とかってnumberな変数にnullとか代入しちゃってんだろうな…
そりゃstrictNullChecksで困るわけだ

438:デフォルトの名無しさん
16/08/03 21:04:30.24 Ot1v5VqO.net
入れるわけねーだろバカ

439:デフォルトの名無しさん
16/08/03 22:55:31.78 Ve2x0gaK.net
皆さん結局nullとundefinedを区別しているの?どんなコードを書いているの?

440:デフォルトの名無しさん
16/08/03 23:55:39.77 8fjgpLNn.net
一つの変数で区別する用途を無理やり考えるならば
・undefined: 初期化前
・null: 利用不可
・object: 利用可
なんて例があるかもしれない。普通はNullObjectで済ませるか

441:デフォルトの名無しさん
16/08/04 02:41:29.69 0QnTEdcF.net
>>418
じゃあif(!hoge)の判定がTypeScript的には何も問題無いことは分かるよな?
どの辺が釣りなのか教えてくれ

442:デフォルトの名無しさん
16/08/04 09:59:24.73 aMt1KCpE.net
strictNullChecksを気持ちよく使いたいなら構造から見直しになるな
{ x?, y? } // 必ずペアで使う
ではなく
{ pt?: { x, y } }
としないと ! を避けられない

443:デフォルトの名無しさん
16/08/08 22:15:39.27 W4Hzna5O.net
だれかtypeScriptでバリバリサーバサイドもやってるぜって人いる?
使い勝手を是非聞きたい

444:デフォルトの名無しさん
16/08/25 22:38:44.02 yGHELMdE.net
マクロのミスでconst enum同士で除算しちゃってて間違い探しをする羽目になったぜ
ありえない数値になってたのにコンパイラは叱ってくれなかったよ

445:デフォルトの名無しさん
16/08/26 07:44:50.99 LCNVy+4G.net
>>424
enum同士の除算結果の型はnumberだから、コンパイラの解釈は妥当だぞ
「単位付き数値」があればエラーにできるケースもあるかもしれない
Nominal typesの一環で良い感じの機能が入らないものか

446:デフォルトの名無しさん
16/08/26 10:18:15.73 uxIG+t+y.net
numberからconst enumへ暗黙的な変換が許されるのが問題だと思ったんよ
警告されれば先に気づくことができたから

447:デフォルトの名無しさん
16/08/26 15:52:13.72 mbeLOtT9.net
暗黙も何もenumの要素は最初からただのnumberだからな
JavaScriptとの互換性を考えれば妥当な仕様だろう

448:デフォルトの名無しさん
16/08/26 16:16:08.43 LCNVy+4G.net
他言語と比べると確かにチェックがガバガバだが
interfaceを明示的にimplementsしなくてもシグニチャだけを見ることと比べると
一貫性はあるとは思う。型システムがStructuralなことの弊害だろう
数値でなくても良いなら enum より String Literal Types を使うべきなんだろうな

449:デフォルトの名無しさん
16/08/26 16:48:05.33 mbeLOtT9.net
型システム自体はJavaScript側にあるんだ
TypeScriptがやってる事はJavaScriptのソースに書かれてる型を見えるようにしてるだけとも言える
そもそもJavaScriptが動的型なんだから無理やり静的型にしようとしても微妙なところは出てくるだろうな

450:デフォルトの名無しさん
16/09/01 04:24:05.73 oFB7MvRf.net
Announcing TypeScript 2.0 RC
URLリンク(blogs.msdn.microsoft.com)
>>380に追加
Number, enum, and boolean literal types
URLリンク(github.com)

451:デフォルトの名無しさん
16/09/02 02:34:58.82 D4RF+Hn1.net
switch使うとダサくなるな
match withにして欲しい

452:デフォルトの名無しさん
16/09/02 15:48:27.54 LgVEFfHs.net
内部モジュールについて教えてください。
これを使う場合ってconcatで1ファイル化する場合ってことでいいんでしょうか
webpackをつかって1ファイル化する予定なんですがその場合は外部モジュールを使う認識であっていますか?

453:デフォルトの名無しさん
16/09/02 17:23:11.44 dDo1g1S1.net
外部モジュールになるファイルは独立してるはず
今はnamespace推奨で内部モジュールって表現はあまり意味を成してない?
ので1ファイルにまとめたら名前空間で仕切られてるだけって考えでいいんじゃないか

454:デフォルトの名無しさん
16/09/03 00:54:26.94 FrYijLTu.net
昔からある単なるmoduleはもうobsoleteですぐにnamespaceにリネームすべきだね
いわゆるモジュールはJavaScriptの世界を知らないと理解しがたいものになってるね

455:デフォルトの名無しさん
16/09/03 00:56:21.93 FrYijLTu.net
ES6のmuduleが普及すればかなりシンプルになるんだろうけど、まだブラウザがサポートしてない

456:デフォルトの名無しさん
16/09/09 21:36:47.25 oMlYA35z.net
letは再入不可にして欲しいなあ

457:デフォルトの名無しさん
16/09/09 21:41:01.71 0o6Zl0oX.net
constじゃあかんの?

458:デフォルトの名無しさん
16/09/10 07:30:02.50 XD8JXdoT.net
なんか名前が先祖帰りっぽくてなあ

459:デフォルトの名無しさん
16/09/11 01:15:44.93 PWIs+lC0.net
>>436は「再入」不可と言ってんだが…

460:デフォルトの名無しさん
16/09/11 01:38:43.42 m+TGnnw0.net
リエントラントを意識したことが無かったりすると
再入って言葉を再代入の変わりに使ってもいいじゃん?とか思ってしまうのだろう

461:デフォルトの名無しさん
16/09/11 08:21:20.09 o8qO+nVm.net
「リエントラントな変数」はナンセンス�


462:セから、ま、多少はね?



463:デフォルトの名無しさん
16/09/14 09:26:01.83 tSXXNMuv.net
tsってjsに変換して型情報捨てちゃってるけどバイナリにコンパイルとかサポートしないのかな
WebAssemblyにそのまま使えたら面白いことになりそう

464:デフォルトの名無しさん
16/09/14 09:52:25.62 EEwsGEAZ.net
asm.jsは文法だけjsのサブセットで実行モデルは全然違うんでサポートしないっつうかできなかったはずだが、WebAssemblyも同じじゃないの?

465:デフォルトの名無しさん
16/09/14 10:28:43.01 8JRyg+5x.net
折角の型情報を活かせるのが構文チェックだけで
高速化には寄与しないってのは勿体ないのは確かだな

466:デフォルトの名無しさん
16/09/14 13:51:30.89 Adg+xGfe.net
TypeScriptのビジョン的には、そういうのはESが新バージョンで型アノテーションを導入して
ブラウザによって最適化されるべきということなんじゃない?
ハックで実装するのはTypeScript的じゃないよ

467:デフォルトの名無しさん
16/09/14 14:43:49.29 UUl7aTux.net
ES5と同じようにwasm用のサブセット作って段階的にサポートしていけば余裕しょ

468:デフォルトの名無しさん
16/09/14 14:58:26.52 Adg+xGfe.net
アセンブリレベルまでコンパイルしようと思えば現在JSに丸投げしてる部分をTSで独自に定義し直す必要があるから、
仕様はサブセットどころか無茶苦茶肥大化するよ

469:デフォルトの名無しさん
16/09/14 15:06:48.85 eWqPmXTS.net
どうせJavaやC#がWebAssemblyの出力に対応するだろうし、高速化を期待するならそっちを使うべきだな

470:デフォルトの名無しさん
16/09/14 15:12:59.56 eWqPmXTS.net
ただ、Webの世界はAPIが全てJavaScript用に定義されてる訳だから
DOMをいじるとかWeb関連のコードを書こうとしたらJavaScript使うのが一番楽だろう
で、TypeScriptを使えばエラーの少ないコードが書けるよってだけの存在だな

471:デフォルトの名無しさん
16/09/21 09:53:22.62 ye3OhaXn.net
netbeansでtsファイルをコンパイルできますか?

472:デフォルトの名無しさん
16/09/23 07:28:38.08 wUPl9fHa.net
TypeScript 2.0 正式リリース
URLリンク(blogs.msdn.microsoft.com)

473:デフォルトの名無しさん
16/09/25 21:22:23.16 rgw8PMte.net
Visual Studio2015のTypeScript2.0で
if(1===2){
 ...
}
とすると、
エラー TS2365 演算子 '===' を型 '1' および '2' に適用することはできません。
になるのですが、1と2を比較すると何が悪いのでしょうか?

474:デフォルトの名無しさん
16/09/25 22:06:10.66 s0l/HB/m.net
>>452
Tagged Union 由来のエラーのような気がする
ナンセンスなコードだけど、気になるようならエラーレポートしておいで
片方が変数なら問題ないから、普通にコードを書くうちは表面化しない

475:デフォルトの名無しさん
16/09/26 03:17:54.07 Pt8k1v+W.net
>>451
Revised 型の国のTypeScript
URLリンク(typescript.ninja)
>>430
TypeScript 2.0.3 変更点
URLリンク(qiita.com)

476:デフォルトの名無しさん
16/09/26 12:48:28.20 KtFZyGzz.net
型の国新人研修マニュアルみたいで微妙だった

477:デフォルトの名無しさん
16/09/26 14:39:12.43 ymOrEJcI.net
一瞬変な絵が出てブラクラかと思った
URLリンク(techbooster.github.io)

478:デフォルトの名無しさん
16/09/26 23:44:06.70 9aeHOXYg.net
>>452
これは興味深い挙動だな
確かにnumberよりも1や2という「型」の方がより特殊化されてるからそっちで比較されちゃったんだろうな
let n: 1 = 1;
if (n === 2) { // 同じエラー
if (n === <number>2) { // OK (もちろんfalseになる)
number型定数のデフォがnumber型だと最初がエラーにならなくなるから難しい問題だな
定数同士の比較の時は型を昇格させるみたいな処理�


479:ヌ加する事になるのかな



480:デフォルトの名無しさん
16/09/27 00:14:39.14 pG4L5ums.net
literal types増えたのリリースノートに書いてあるだろ
アナウンスのドキュメントさえ読まないバカが賢ぶってもまるわかりなんだよ

481:デフォルトの名無しさん
16/09/27 00:21:02.93 DHOAQjGg.net
変なのが来た

482:デフォルトの名無しさん
16/09/27 13:49:47.90 cO8I5ivP.net
Delphiか、、Prismはお試しで終わったっけな

483:デフォルトの名無しさん
16/09/27 16:37:55.22 LSfhFpLX.net
espower-typescriptのtypescript2対応版ってないですか?

484:デフォルトの名無しさん
16/09/27 18:40:40.20 LSfhFpLX.net
espower-typescriptは自動でproject rootのtsconfig.jsonを参照しているんですが
別ファイルで指定する方法ないでしょうか?

485:デフォルトの名無しさん
16/09/27 22:52:10.27 K3k5rGhG.net
>>458
とりあえず>>452のエラーの理由を詳細に説明してくれ

486:デフォルトの名無しさん
16/09/30 12:56:49.51 Y6l190wq.net
typescriptでは、
こういう書き方をするようですが、
$(document).ready(() => { ... });
普通の書き方
$(document).ready(function () { ... });
だとダメなのでしょうか?

487:デフォルトの名無しさん
16/09/30 13:07:29.24 LMNz6D7V.net
>>464
全く問題ないよ。関数内のthisの指し先の違いにだけ注意がいる

488:デフォルトの名無しさん
16/09/30 17:16:18.31 ff48EwFg.net
>>464
typeScriptというよりes2015ですね。

489:デフォルトの名無しさん
16/10/05 16:03:45.86 ndferu82.net
jQueryの場合はコールバック内で$(this)とかするけど() => {にするとおかしな事になる(最新だとどうなるかは分からん)
だからjQueryに渡す場合は全部functionにしてる。一貫性がなくなって気持ち悪いけど

490:デフォルトの名無しさん
16/10/06 09:02:48.12 RX03s8Mg.net
どちらも関数ではあるけど用途に違いがある以上、元より一貫性を出すことなんてできないでしょ

491:デフォルトの名無しさん
16/10/06 15:59:28.90 xaiWfMZS.net
() => {}.bind(this)

492:デフォルトの名無しさん
16/10/06 20:20:49.67 57+jsWi1.net
>>468
用途に違いがあるっていうのかな?
functionの挙動に依存しちゃってるから仕方なく使ってるってだけだし、いずれ使う必要は無くなる

493:デフォルトの名無しさん
16/10/07 14:51:03.71 CXORFQa6.net
null合体演算子はありますか?

494:デフォルトの名無しさん
16/10/08 21:45:49.55 2uwi8nYQ.net
>>471
|| のことかな? falseだとダメだけど

495:デフォルトの名無しさん
16/10/20 18:22:59.19 UBHF5fAS.net
typescriptでnode_modules配下のjsコードのimportは可能ですが
自作のjsコードをimportして使いたいのですが可能でしょうか?
具体的に言うとpegjsで作ったparserをtypescriptから使いたいんです。

496:デフォルトの名無しさん
16/10/21 09:58:59.53 xTFSBjWO.net
>>473
URLリンク(qiita.com)

497:デフォルトの名無しさん
16/10/21 10:02:09.42 PxEW311p.net
公開部分だけなら自分で定義ファイル書くのは容易なんじゃないか
もしくはソースをTypeScriptに変換しちゃって-d付きでコンパイル

498:デフォルトの名無しさん
16/10/21 12:40:55.64 xTFSBjWO.net
ちょっと考えればtsだってjsに変換してからimportしてるわけだからエラーが出てるようにみえるのは
定義がないだけってわかるだろうに。アホですな。

499:デフォルトの名無しさん
16/10/24 23:34:32.07 oa9Cbf2z.net
typescript2.0から.d.tsのデフォルトの検索パスってどうなってるんですかね?
とりあえず自分で定義したのはnode_modules/@types/ に置くことで認識はするんですけど
気持ち悪いのでできればnode_modulesに置きたくないんですよね

500:デフォルトの名無しさん
16/10/25 00:14:10.49 jY50IjHL.net
その手の質問はQ&Aサービス使え

501:デフォルトの名無しさん
16/10/25 09:54:10.21 wi8xj/Ad.net
>>477
--typeRoots
次からURLリンク(github.com)を必�


502:ヌとしてテンプレに入れようぜ



503:デフォルトの名無しさん
16/10/25 15:38:46.44 DJibeu24.net
そう言わずに教えてあげればいいじゃない。どうせ話題もないんだし

504:デフォルトの名無しさん
16/10/25 16:45:27.88 k0D4gpoS.net
.net frameworkを使えたりframeworkからコンパイルできれば面白くなりそうなのに

505:デフォルトの名無しさん
16/10/25 18:39:55.45 UTXk7OSn.net
たしかに .Net Framework使えたら便利だな
現状ではNode.jsから外部コマンドを叩いて
C#やPowerShellを経由すればできるんじゃね

506:デフォルトの名無しさん
16/10/25 20:33:02.00 DJibeu24.net
やっぱりTypeScript使いの人はMicrosoftマンセーの人が多いの?
Mac使いとしては.Netが使えたからどうなんって感じなんだが。
ElectronとかでTypeScriptを使う話をしてるの?

507:デフォルトの名無しさん
16/10/25 21:30:56.89 VLkXttsf.net
Windows向けtypescript処理系自体jscriptにコンパイルされて.NETオブジェクト経由でファイルアクセスしてなかったか

508:デフォルトの名無しさん
16/10/26 02:40:39.39 m/Az1cPZ.net
>>483
>TypeScript使いの人はMicrosoftマンセーの人が多いの?
特定の企業が好きというよりかは
デファクトスタンダードに乗りたいだけ
WinとMacならWinが(価格性能比的に)使いやすいし
AndroidとiPhoneならAndroidが使いやすいから
(規制が少ないのでとくに開発側としては)

509:デフォルトの名無しさん
16/10/26 03:51:14.56 CrOhdQQd.net
typescript使うよりc#で書くほうが楽だよね

510:デフォルトの名無しさん
16/10/26 07:48:56.60 JLzF9ZGl.net
>>481
JsProjectWinRTNamespace: URLリンク(msdn.microsoft.com)
WinRT (UWP) ならJavaScript側へ公開できるから、それを使うことは可能。
なんにせよ、JavaScriptホスト側を握っていれば (ChakraCore等) 好きにできる。Macでも。

511:デフォルトの名無しさん
16/10/26 10:52:47.34 jSNrAQ3l.net
>>484
.netじゃなくてWSHを使ってると思う
tsc.jsの2630行目辺りを読んでみれ

512:デフォルトの名無しさん
16/10/26 14:57:17.75 L9VZpe/b.net
tsc.js
URLリンク(github.com)

513:デフォルトの名無しさん
16/10/27 00:16:48.17 e6l93V+P.net
>>485
surfaceて高いイメージあるが。
最近はmacも安いし、unix系だからweb系ならmacの方が人気ないか?
そしてtypeScript使うやつはweb系だよね。

514:デフォルトの名無しさん
16/10/27 00:28:41.45 rC8yedLe.net
Web系といってもBtoBの比較的かっちりしたものをやってるところはC#やJava使ってWindows上で開発してるところも多いよ
そしてTypeScriptもWeb系の中では比較的そっちの方で好まれてるイメージ

515:デフォルトの名無しさん
16/10/27 07:44:18.44 aKCl6pYl.net
Web系じゃないけどソフトのプログラムでJavaScriptが採用されてるから使ってるよ

516:デフォルトの名無しさん
16/10/31 11:16:34.62 zObjWshz.net
データと操作を分離する運用
URLリンク(goo.gl)
上記スタックオーバーフローを見てたんですが
データ構造を扱うときにclassを使わずにすべてjsonにしてしまうって運用は結構を有る話でしょうか?
個人的にはElixirも触っていてデータ構造と処理関数を分けると言うのはアリだとは思うんですが
手元のコードはclass使いまくりでシリアライズが必要になったタイミングで軽く後悔しているところです(^ρ^)

517:デフォルトの名無しさん
16/10/31 12:47:50.83 UgzYDGEX.net
そんなに難しい話じゃないような
class Pen {
constructor(private json: PenData) {}
}
でいいじゃん

518:デフォルトの名無しさん
16/10/31 12:58:02.65 zObjWshz.net
>>494
それでデシリアライズしたものをシリアライズした時


519:にどうやってPenDataだと特定するの?



520:デフォルトの名無しさん
16/10/31 13:30:00.95 lUtaNTCT.net
>>495
シリアライズした構造が固定なら、ルートから順に再構築するのでは?
自分で全てのコンストラクタなりdeserializeメソッドを実装することになる
汎用デシリアライズ関数1個で全てを賄うつもりなら、JSON内にクラス名を保持して
クラス名とJSONからオブジェクトを構築するファクトリを用意するのかな
TypeScriptは実行時型情報が無いから、意外と素直で原始的な方式になると思う

521:デフォルトの名無しさん
16/10/31 16:02:19.09 zObjWshz.net
>>496
ですよね。結局こういうめんどくさい実装になるので、だったら
最初からロジック的にデータ構造はすべてjsonにしてしまったほうが楽かなと。

522:デフォルトの名無しさん
16/10/31 17:59:38.01 lUtaNTCT.net
>>497
ロジック的にJSON (=循環の無い木構造) にできるなら、それが楽だとは思う
実行時には循環参照が必要になる場合は、保存時にフラットなJSONに変換せざるを得ない
これを汎用化していくと、いわゆるO/Rマッパーになるんだろうな


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