TypeScript part2at TECH
TypeScript part2 - 暇つぶし2ch2:デフォルトの名無しさん
15/05/01 11:16:24.11 O5IrbREb.net
URLリンク(twitter.com)
Anders, father of C#, and Misko, father of angular,
on the same stage at Build2015.

3:デフォルトの名無しさん
15/05/01 12:23:58.69 Cd44J9+J.net
>>2
MSとGoogle夢の共演

4:デフォルトの名無しさん
15/05/01 16:28:43.35 Cd44J9+J.net
Announcing TypeScript 1.5 Beta
URLリンク(blogs.msdn.com)
しかし、いきなり大量のコンパイルエラーが…
まだ更新しない方が良さそう

5:デフォルトの名無しさん
15/05/03 17:06:42.35 rBxa49N8.net
インストールしたら1.5 Betaが入りました。
$ tsc sample.tsでコンパイルしたjavascriptファイルを$ node sample.jsで実行すると
__.prototype = b.prototype;の箇所でエラーになるんですが
typescriptの書き方でおかしいところを教えてください
module M {
export interface aInterface {
f1(): void;
}
export interface bInterface {
f2(): void;
}
class A extends B implements aInterface {
f1() {
console.log(1);
}
}
class B implements bInterface {
f2() {
console.log(2);
}
}
}

6:デフォルトの名無しさん
15/05/03 17:38:50.79 RegehUyj.net
>>5
BをAより前に書く

7:デフォルトの名無しさん
15/05/03 18:27:42.73 H+7a6WF5.net
>>6
できました
ありがとうございます

8:デフォルトの名無しさん
15/05/12 21:39:01.53 bsrem9uN.net
typescriptの勉強の為、型推論とanyを使わない書き方を知りたいのですが
コンパイルすると error TS2339: Property 'classList' does not exist on type 'EventTarget'.
ってエラーが出ます。
(1)と(2)の行を型指定しなければエラーが出ないのですが、どのような型を指定したらエラーがでないのでしょうか?
class A {
eventFunc(e: MouseEvent) { // (1)
var target:EventTarget = e.target; // (2)
target.classList.add('red');
}
f() {
window.addEventListener('click', this.eventFunc, false);
}
}

9:デフォルトの名無しさん
15/05/13 08:53:02.33 8FgeUemt.net
(2)をvar target = <Element>e.target;でいいんじゃないかな
DOMの仕様でtargetがElementではないケースがあるのかどうか知らないけど、少なくとも自分で扱う範囲なら問題ないでしょ

10:デフォルトの名無しさん
15/05/13 10:56:22.23 2k7sC9bw.net
>>8
classListだから
var target = <HTMLElement>e.target;
または
var target: HTMLElement = e.target;
じゃないかな?
分からない場合はlib.d.tsを見ればいいよ

11:デフォルトの名無しさん
15/05/13 17:58:04.11 EXojY7d0.net
最初の頃は律儀に型指定してたけど面倒くさいからもうやってない
コンパイル速度が上がるわけでもない。

12:デフォルトの名無しさん
15/05/14 11:17:19.81 gHUa6+Se.net
tsc --noImplicitAnyでかつ明示的にanyを使ってなくてエラーがでなければ
型安全が保たれてるから何も毎回型指定する必要はないよ
ただjquery.d.tsとかanyだらけなんで実行しないとエラーが出ない事とかよくある
単純にjQuery使う程度ならJavaScriptのままでいいとは思う

13:デフォルトの名無しさん
15/06/04 21:53:08.26 jTi6Q4y/.net
やっぱ堅い仕様で書いてるとtscでインライン化して欲しくなっちゃうなぁ

14:デフォルトの名無しさん
15/06/05 11:52:22.54 QvLzrgmO.net
>>13
インライン化し始めるとjsのソースがグチャグチャになりそうだ
get,setはあるんだからそれでいいんじゃないの?

15:デフォルトの名無しさん
15/06/06 09:46:32.31 be84NOOA.net
>>14
うちの場合JavaScriptはただの実行ファイル扱いだからね
デバッグはソースマップなりインライン化の無効なりできればいいんじゃないかな

16:デフォルトの名無しさん
15/06/07 13:32:40.51 yxti539q.net
1.5がなかなか正式リリースされないのはなんでぞ

17:デフォルトの名無しさん
15/06/07 20:32:21.84 4Wk1GroN.net
>>16
元々の予定にはなかったDecoratorを入れたからじゃないかな
仕様の検証の為に1.5AlphaやBetaを挟んだのだと思う

18:デフォルトの名無しさん
15/06/09 14:13:38.63 X0sByrSC.net
>>15
インライン化がもし速度の為だったら速くなるかどうかは未知数だな
JITコンパイラの高速化の癖というか挙動を予測するのはかなりむずい
あくまで主観だけど長くなった関数は高速に実行されにくくて
細かく関数に分けた方が速くなる気がする (実際にそういう事はあった)
関数単位でコンパイルするしないを決めてるっぽいし

19:デフォルトの名無しさん
15/06/09 22:54:39.34 wugeehUL.net
>>17
サンキュー

20:デフォルトの名無しさん
15/06/10 17:03:59.59 /7VhIJtD.net
解析によるインライン化はtscでもJITでも好きにしてくれていいけど
inlineキーワードで明示できた方が気持ち的にスッキリする

21:デフォルトの名無しさん
15/06/18 11:14:55.39 kEEgKM4/.net
ES6がいろんなブラウザで動かせるようになった頃にTypeScriptってどうなるの?

22:デフォルトの名無しさん
15/06/18 13:05:05.85 4ooRsfQ9.net
ECMAScript2015(旧ES6)がリリースされたんだな
>>21
TypeScriptの最大のメリットは静的型チェックだから有用性は全く変わらない
他にもprivate指定とかも有用だし既にES7(ES2016?)の仕様も先取りしようとしてるよ

23:デフォルトの名無しさん
15/07/09 12:12:04.05 6sfBPUUP.net
newさせないようにコンストラクターを非公開にしたい
現状でも実現できるけど、そのためにインターフェースを2つも書くのは面倒くさい

24:デフォルトの名無しさん
15/07/15 10:51:34.25 4m+kxR2f.net
URLリンク(blogs.msdn.com)
TypeScript Teamの求人だってさ

25:デフォルトの名無しさん
15/07/21 01:31:13.85 /gCXtG+X.net
Announcing TypeScript 1.5
URLリンク(blogs.msdn.com)
VS2015と合わせてきたか

26:デフォルトの名無しさん
15/07/21 01:32:58.22 /gCXtG+X.net
URLリンク(github.com)
>1.6
>ES6 Generators
>Local types
>Generic type aliases
>Expressions in class extends clauses
>Class expressions
>exclude property in tsconfig.json
>User defined type guard functions
>async/await for ES6
>External module resolution enhancements
>JSX support
>Intersection types
>abstract classes and methods
次の仕込み進んでるね

27:デフォルトの名無しさん
15/07/21 02:33:09.52 rWNspVF5.net
昔はJScriptという亜種JavaScriptを作っていたMSが
今はJavaScriptの未来を作ってるんだから興味深いよ。
V8を作ってるGoogleが作ってるAngularJSが
TypeScriptを採用してるっていうんだからね。
世の中何が起こるかわからない。

28:デフォルトの名無しさん
15/07/21 10:29:14.64 JRZO1Ijb.net
ES6以降の見識とかモダン言語のたしなみがないと新機能を追いかけるのは難しくなってきてるな

29:デフォルトの名無しさん
15/09/03 18:56:51.43 nwE/lfZd.net
Announcing TypeScript 1.6 Beta
URLリンク(blogs.msdn.com)

30:デフォルトの名無しさん
15/09/09 13:41:12.43 /LabsqIc.net
node.js 4.0.0 がリリースされたけど tsc 1.5.3 でのコンパイルは問題なかったよ

31:デフォルトの名無しさん
15/09/17 11:57:54.97 EJYiGj1J.net
TypeScript 1.6 来た!
URLリンク(blogs.msdn.com)
classとか型関連の機能追加が多いかな

32:デフォルトの名無しさん
15/09/17 13:08:48.57 1pEQnj0M.net
日本語で更新内容を教えて

33:デフォルトの名無しさん
15/09/17 13:39:47.54 EJYiGj1J.net



34:>>32 誰かがブログで解説するだろうからそれを待て あと1.6でオブジェクトリテラルの型チェックが厳密になって大量のエラーが… https://github.com/Microsoft/TypeScript/wiki/Breaking-Changes ↑ここに対処法とか書いてあるからバージョンアップする場合は見るべし



35:デフォルトの名無しさん
15/09/18 00:34:58.40 RRhCs/3r.net
>>32
TypeScript 1.6.0-beta 変更点
URLリンク(qiita.com)
TypeScriptがReactをサポート
URLリンク(www.infoq.com)
1.6betaの記事だけど、1.6正式版でも同じだよ

36:デフォルトの名無しさん
15/09/29 13:25:38.28 5DFpZmVK.net
typescriptって型を省略せずに書くのが王道なの?どうなのかおしえてください

37:デフォルトの名無しさん
15/09/29 13:57:38.01 k2h28xWP.net
>>35
var a = 1;
は型を省略して書いてるように見えるが型推論されてaはnumber型に固定される
その後a = "hoge";と書くとエラーになる
型推論をあてにして型を省略するのは普通だがそういう事を聞いてんの?

38:デフォルトの名無しさん
15/09/29 14:07:02.02 YDlHSLNo.net
partialはサポートしてないんですよね?

39:デフォルトの名無しさん
15/09/29 14:10:18.85 RAm+PgpZ.net
>>36
これからは型をかかないようにします

40:デフォルトの名無しさん
15/10/01 18:23:15.46 c/9pCOim.net
関数の引数の型は書いて下さいね
あと --noImplicitAny は忘れずに

41:デフォルトの名無しさん
15/10/01 18:44:40.47 JwHQ7pBT.net
--noImplicitAny を付けてれば引き数の型を書かないとエラーになるけど
戻り値の型は省略できてしまう
コンパイラは型推論で戻り値の型は分かるから補完候補の表示で型は分かるけど
戻り値の型もちゃんと書いた方がいいね
そうすると整数を返す予定だったところを文字列返しちゃった時にエラーになる

42:デフォルトの名無しさん
15/10/02 02:53:49.54 HtrqvoEB.net
>>37
対応してませんね
けれど前から提案はされていて、C#と異なる使い方も模索されているみたいです
Partial classes
URLリンク(github.com)
Suggestion: Reopen static and instance side of classes
URLリンク(github.com)

43:デフォルトの名無しさん
15/10/02 12:29:38.37 O/xnKl5a.net
>>41
そういうのはinterfaceとかmodule(namespace)を使えば実用上困ることは
無いと思うからいらないでしょ

44:デフォルトの名無しさん
15/10/03 10:49:02.03 HkSezUmR.net
コードの中にnew Promiseを書くと
tsc test.tsでチェックしたら
error TS2304: Cannot find name 'Promise'
って出るんですがこれはどうしたらでなく出来ますか?

45:デフォルトの名無しさん
15/10/03 11:10:26.45 x61qrQJS.net
>>43
tsc --target ES6 にするかそれが無理なら
URLリンク(github.com)
からes6-promise.d.tsを落としてくる

46:デフォルトの名無しさん
15/10/03 11:39:52.85 HkSezUmR.net
--target ES6を指定します
どうもありがとうございます

47:デフォルトの名無しさん
15/10/03 18:36:19.11 OMUtivN5.net
var i;
var l;
var a = [
{"a":1},
{"b":1},
]
for (var i = 0; i < a.length; i++) {
console.log(a[i]);
}
コンパイルすると
TS2403: Subsequent variable declarations must have the same type. Variable 'i' must be of type 'any', but here has type 'number'
ってなるんですがよく分かりませんどうかけばいいんでしょうか

48:デフォルトの名無しさん
15/10/03 23:27:40.80 x61qrQJS.net
>>46
エラーメッセージが理解出来れば分かる事ではあるが…
var i; ← iの型がany
for (var i = 0; ← iの型がnumberだから矛盾してると言ってる
var i;を消すかvar i: number;とすればいいよ

49:デフォルトの名無しさん
15/10/04 13:23:21.78 DvM48NAd.net
超超初心者なんですが
仮にグローバルで宣言したiがforでなく別の関数で使われることを意図していた場合
>>46のように変数iをfor文でたまたま同じ名前の制御変数としてvar宣言すると思うのですが
このときvarが付いているにも関わらずfor文のiは一行目で宣言したiとみなされてしまうってことですか?

50:デフォルトの名無しさん
15/10/04 13:37:43.55 khdgfcjT.net
>>48
JavaScriptのvarはブロックスコープの機能が無い (詳細はググるなりしてくれ)
直感的にしたければES6のletを使うしかない

51:デフォルトの名無しさん
15/10/04 13:41:16.06 bHkc51Yk.net
TSはES5ターゲットでもlet/const使えるからへーきへーき

52:デフォルトの名無しさん
15/10/04 13:42:29.90 khdgfcjT.net
>>48
いや間違えた…TypeScriptは普通にletが使えるからletを使えばいい
>>46のvarをletに書き換えるだけでうまく行くよ

53:デフォルトの名無しさん
15/10/04 13:44:14.49 khdgfcjT.net
かぶった…まぁそういう事だ

54:デフォルトの名無しさん
15/10/04 13:49:24.42 DvM48NAd.net
>>49
ああ!ifやforは関数ではないからvarつけても同名のグローバルを見に行っちゃうんですね!
そこで出てくるのがlet/constか!なっとく!

55:デフォルトの名無しさん
15/10/05 00:57:09.65 908hRhwN.net
>>53
let使える前のjsの変数スコープは基本的に関数レベルだったんだよ。
rubyやpythonとかもそうだったりする。

56:デフォルトの名無しさん
15/10/15 21:21:16.18 8y87T4ny.net
1.7のissue残り3つ
そろそろ来るか

57:デフォルトの名無しさん
15/10/16 09:45:15.72 cndR1OOY.net
issueが0になってからリリースまで1ヶ月以上掛かるし
1.6がリリースされた時は1.6.2だったからもう少し先な気がする

58:デフォルトの名無しさん
15/10/17 16:42:41.11 /J6P+2iK.net
ポリモthisが待ち遠しい

59:デフォルトの名無しさん
15/10/23 19:57:18.48 uz+nJ7WP.net
>>57
ポリモthisって変数の受け取り側で(ダウン)キャストしないで済むって事でしょ?
そんな待ち遠しいって何か便利な使い方とかあるの?

60:デフォルトの名無しさん
15/10/23 23:22:47.24 vOh1PKiJ.net
interface IEquatable {
equals(other: this): boolean
}
とかかな

61:デフォルトの名無しさん
15/10/23 23:33:29.49 oFKlQBDH.net
typescriptで使いやすいEditorでおすすめってなんですかね?
MS由来からいってVSなんでしょうけど、当方Macなので、、、、

62:デフォルトの名無しさん
15/10/24 11:24:42.03 lLID1QIl.net
>>60
URLリンク(github.com)
普段何使ってるんだよ
Vimは導入が難しいが、何するにしても特化した環境が作れるぞ

63:デフォルトの名無しさん
15/10/24 14:26:29.93 otxAXsrh.net
>>59
class Base {
getThis(): Base { return this; }
}
class Derived extends Base {
print(): void { console.log('Derived'); }
}
let derived = new Derived();
derived.getThis().print(); // 1.6.2だとBaseにprint()がねーよと怒られる
1.7だと
getThis(): this { return this; }
にする事でコンパイル通ってちゃんと実行も出来る
って事は理解したけど、equals(other: this)のthisって自分の型名のエイリアス
として使えるから便利って事であってるの?

64:デフォルトの名無しさん
15/10/24 14:31:41.39 otxAXsrh.net
>>60
Emacsと
URLリンク(github.com)
↑を使う事でVSに劣らないインテリセンス環境が出来上がるぞ(ページ内のscreencastを見るべし!)
ちなみに常用してるけどMac版Emacsは使った事ないから詳細は分からん

65:デフォルトの名無しさん
15/10/24 14:48:22.39 otxAXsrh.net
>>59
class Base {
equals(other: this): boolean { return other.name === "Derived"; }
}
class Derived extends Base {
name = "Derived";
}
let derived = new Derived();
console.log(derived.equals(derived));
だと、1.7でも(正確には1.7.0-dev.20151016)
test.ts(3,18): error TS2339: Property 'name' does not exist on type 'Base'.
って、ポリモらないけど…なんでなん?

66:デフォルトの名無しさん
15/10/24 16:15:55.69 plgIlyg5.net
>>63
>>61
情報ありがとうございました。結局atomに落ち着きました。
最初補完効かないじゃんとか思ってましたが、tcconfig.jsを作ったら機能したので
問題なさそうです。
emacsかvimかで言ったらvim寄りですが、設定の手間とかいろいろ考えたら
atomが一番楽です。すいません。

67:デフォルトの名無しさん
15/10/24 17:46:56.82 lLID1QIl.net
>>64
そういった使い方は無いと思うよ。その場合はジェネリックを使うといい
class Base {
equals<T extends { name: string; }>(other: T): boolean { return other.name === "Derived"; }
}

68:デフォルトの名無しさん
15/10/25 00:25:48.72 1wUVsAr0.net
>>66
URLリンク(github.com)
このページのサンプルコードで>>64みたいなのがあったよ
>>62の戻り値バージョンは直感的で使い易いし良いんだけど
引き数バージョンがポリモらないのは何か変だなとは思う
ま、ジェネリックがあるから困らないけど1.7がちゃんとリリースされたら
また確認してみよう

69:デフォルトの名無しさん
15/10/25 07:40:54.38 bIzVFZFH.net
>>67
Baseがあとからどう拡張されるかなんてわかるわけないだろ
未来予知でもさせる気か

70:デフォルトの名無しさん
15/10/25 15:05:43.36 MYRFLLoW.net
>>68
コールの仕方がderived.equalsなんだから未来予知なんてしなくたって
コンパイル時にthisがDerivedなのが決まるでしょ (ジェネリックの場合はTがDerived)
C++は呼び出した時に型を決めてコンパイルされるからそういうのが当たり前だけど
TypeScriptはジェネリックとかも先にコンパイルしようとすんだな
とりあえずそういう仕様なのは理解したよ

71:デフォルトの名無しさん
15/10/25 20:07:24.22 bIzVFZFH.net
>>69
それは>>67のいうところの戻り値バージョンだろ
Baseの中のthisはBaseでしかない

72:デフォルトの名無しさん
15/10/26 11:50:38.96 2PrT+848.net
>>70
は?継承されたメソッドのderived.equalsでアクセスしてんのにthisがBaseなわけないだろ
お前が言ってんのは字面上の事だろ
だからC++はジェネリック(テンプレート)は呼び出された時しかコンパイルされないんだよ
TypeScriptもそうだと思っていたと先に書いただろ
equals(other: this)もジェネリックと同じようなもんだろうと思っていたんだよ
同じ事なんど�


73:煬セわせるな



74:デフォルトの名無しさん
15/10/26 12:01:33.27 2PrT+848.net
ちなみに>>64のコードはコンパイルエラーは出力されるが吐き出された.jsを
実行すると問題なく実行出来る
JavaScriptは動的型だから当然だけど、TypeScriptもジェネリック(とポリモthis)は
呼び出し時に毎回コンパイルした方がよりJavaScriptに近くなるとは思うけどね
(コンパイルというか型チェックだけだが)

75:デフォルトの名無しさん
15/10/26 13:14:02.12 Jg07UfdQ.net
エラーになってるのに何とち狂ってんだ
お前はもうそう思い込んでていいから他の人間に迷惑かけるなよ

76:デフォルトの名無しさん
15/10/26 13:23:02.34 2PrT+848.net
>>73
言ってる意味が理解出来ないなら無理に意味不明な返答しなくていいよ

77:デフォルトの名無しさん
15/10/26 13:29:03.77 rrrZ2q/W.net
C++のテンプレートではそうじゃないみたいだけど
他言語のジェネリクスやらパラメータ多相だと型引数T(ここで言えばthis)がnameを持つって制約がなけりゃ
other.nameとかやってる時点でコンパイルエラーになるのが普通
呼び出し側でどう呼び出されてようが知らん

78:デフォルトの名無しさん
15/10/26 13:40:49.36 2PrT+848.net
だから説明してくれなくてもTypeScriptの仕様は知ってるよ
class Base {
getThis(): this { return this; }
}
class Derived extends Base {
name = "Derived";
}
let derived = new Derived();
console.log(derived.equals(derived)); // OK:コンパイルも実行も問題ない
この場合のgetThis(): this { return this; }はBaseにあるのに型はDerivedになる
それがポリモthis
引き数版もそうだと思ったら違ったから変だなとおもっただけだ
つうか何回同じ事書かせるんだよ…

79:デフォルトの名無しさん
15/10/26 13:42:45.78 2PrT+848.net
間違えた…
> console.log(derived.equals(derived));
derived.getThis().print();

80:デフォルトの名無しさん
15/10/26 13:45:10.06 2PrT+848.net
class Base {
getThis(): this { return this; }
}
class Derived extends Base {
print(): void { console.log('Derived'); }
}
let derived = new Derived();
derived.getThis().print(); // OK:コンパイルも実行も問題ない
なんどもゴメンよ…こっちだった

81:デフォルトの名無しさん
15/10/26 15:10:36.99 rrrZ2q/W.net
class Base {
 identity(a: this): this { return a; }
}
class Derived extends Base { /*略*/ }
let derived = new Derived();
derived.indentity(derived) // => Derived
これで戻り値だろうが引数だろうがthis型の意味が変わらんのは分かるだろ
んでもうひとつ
親クラスの中で子クラスの実装に依存するような定義することがおかしいと思わんのか
テンプレートみたいにthisを具体的な型に置き換えたメソッドを実際に生成してくれるって訳じゃねーんだぞ

82:デフォルトの名無しさん
15/10/26 15:38:26.33 2PrT+848.net
>>79
> identity(a: this): this { return a; }
なるほど結局やってくれるのはキャストだけって事だな
> 親クラスの中で子クラスの実装に依存するような定義することがおかしいと思わんのか
いや別に…ジェネリックとかは
equals(other: Derived): boolean;
equals(other: Hoge): boolean;
equals(other: any): boolean { return other.name === "Derived"; }
を短く書けるってだけだぞ
やってる事はいたって普通じゃん

83:デフォルトの名無しさん
15/10/26 15:41:54.45 2PrT+848.net
equals(other: any): boolean { return other.name === "Derived"; }
よく考えたらこれで良かったなw

84:デフォルトの名無しさん
15/10/26 17:12:36.83 RV+rpgqN.net
VisualStudioでTypeScriptを始めてみたのですが加算が上手く出来ません。
数値で入力して数値で計算しているつもりですが文字列の連結になってしまいます。
以下のソースのどこかに問題がありますでしょうか?
それとも加算の時は明示的にNumberを付けるのが暗黙の了解なのでしょうか?
■index.htmlに以下を追加
<input id="id1" type="number" value="100" />
<input id="id2" type="number" value="50" />
<button type="button" onclick="MyCalc(document.getElementById('id1').value, document.getElementById('id2').value, 'id3');">Calc</button>
<p id="id3"></p>
■app.tsに以下を追加
function MyCalc(a: number, b: number, idOut: string) {
var add: number = a + b; // ←文字列の連結になる
//var add: number = Number(a) + Number(b); // ←数値の加算になる
document.getElementById(idOut).innerHTML = add.toString();
}

85:デフォルトの名無しさん
15/10/26 17:29:52.14 68zEKPr/.net
ゴミだな

86:デフォルトの名無しさん
15/10/26 17:30:24.13 2PrT+848.net
>>82
html内のJavaScriptから.ts内の関数を呼んでも型を変換してくれるわけじゃないよ
だからaもbも文字列が渡ってきてる

87:デフォルトの名無しさん
15/10/26 18:04:54.71 68zEKPr/.net
つまり、
function MyCalc(a: number, b: number, idOut: string) {
  var add: number = Number(a) + Number(b);
  document.getElementById(idOut).innerHTML = add.toString();
}
とすべきである、と。
何このゴミ言語。

88:デフォルトの名無しさん
15/10/26 18:05:52.22 jZMivBq6.net
根がjavascriptだからな
腐っておる

89:デフォルトの名無しさん
15/10/26 20:48:07.59 Jg07UfdQ.net
今日は大漁だなぁ

90:デフォルトの名無しさん
15/10/26 21:03:54.01 2PrT+848.net
>>85
MyCalcに文字列を渡してるのは理解してんの?

91:82
15/10/26 21:09:33.30 +CoO9wxe.net
>>84
tsの引数でnumberと指定しているところにhtmlからstringを渡してるのにエラーでないのが正常ってことですか。
なんとも言えないモヤモヤ


92:した気分ですがそういうものだと思って納得します。 ありがとうございました。



93:デフォルトの名無しさん
15/10/26 23:08:05.78 xkX95Mex.net
そもそも今時htmlファイルにJSのコードがあるのがクソ

94:デフォルトの名無しさん
15/10/27 10:15:27.19 VNkjK7Q1.net
>>88
> MyCalcに文字列を渡してるのは理解してんの?
誰が何を渡すなんか関係ないよ。
MyCalc()がMyCalc()たり得るためには、>>85のようにしなければならないってことでしょ。

95:デフォルトの名無しさん
15/11/01 10:08:53.87 zBN3V9bR.net
ジェネリックと書かれると黒柳徹子の声で脳内再生されるw
かといってジェネリックプログラミングだと長いか。

96:デフォルトの名無しさん
15/11/01 14:26:27.55 85GIjHA4.net
英語だとGenericsだからジェネリックスと言うべきだろうね
日本語だとジェネリックが多いけど

97:デフォルトの名無しさん
15/11/01 17:47:18.14 wW4dECTr.net
>>92
うむ

98:デフォルトの名無しさん
15/11/04 20:57:38.51 hYok3Gvy.net
ゼネリック

99:デフォルトの名無しさん
15/11/19 23:49:04.62 xa/vi52N.net
Microsoftのコードエディタ「Visual Studio Code」β版でオープンソース化、拡張機能で「Go」など約60言語に対応
URLリンク(gigazine.net)

100:デフォルトの名無しさん
15/11/20 11:13:18.44 SnNAjHh0.net
>>96
ちゃんとTypeScriptで書かれてるのが確認出来たし
コーディングスタイルとか色々参考になるな

101:デフォルトの名無しさん
15/11/20 11:53:31.08 9+9LvV/5.net
>>97
なるほど。と思った。確かに生きてる教材として価値あるね。

102:デフォルトの名無しさん
15/11/20 15:30:00.27 oa4HKSA2.net
コーディングガイドラインがTS本体と変わってるな
開発元ですらベストプラクティスが固まってないのか

103:デフォルトの名無しさん
15/11/24 14:34:32.21 qZ9OT4oo.net
VSCodeもElectron使ってるしネイティブアプリもTypeScript+Electronで作るのがトレンドなんだな

104:デフォルトの名無しさん
15/11/24 16:51:28.94 7M39MrWo.net
>>100
Electronってそんなにトレンドなの?

105:デフォルトの名無しさん
15/11/24 18:49:02.47 qZ9OT4oo.net
>>101
トレンドってのは完全に主観だ
そもそもデスクトップアプリを作る機会があまり無いと思われる
あとブラウザで動くJavaScriptとNode.js用のコードはモジュールの問題とか
色々相容れないものがあって両対応させるのは難しい
この辺はES6のModuleが普及すれば多少は改善するのかね

106:101
15/11/24 22:30:19.95 7M39MrWo.net
>>102
レスありがと。
納得+同意。

107:デフォルトの名無しさん
15/11/27 17:09:34.40 /Gh9DtXn.net
New Website Logo: Ericsson
URLリンク(github.com)
Erlang作った会社もTypeScript使ってるんだね

108:デフォルトの名無しさん
15/11/28 23:18:53.43 CBIJUaS6.net
TypeScript Advent Calendar 2015
URLリンク(qiita.com)

109:デフォルトの名無しさん
15/12/01 01:33:36.41 z2GrodUr.net
当日になっても参加一人だけかよTypeScript終わってんな

110:デフォルトの名無しさん
15/12/01 14:46:16.60 MI9NKsx/.net
こういうのは横の繋がりがないと人を集めるの難しそうだな

111:デフォルトの名無しさん
15/12/01 14:52:09.64 MI9NKsx/.net
Announcing TypeScript 1.7
URLリンク(blogs.msdn.com)

112:デフォルトの名無しさん
15/12/01 15:22:54.15 fXKlxJmK.net
今回の機能追加はAsync/Awaitとポリモthisぐらいか
1.8も言語機能の追加は小規模だからだいぶ仕様が安定してきた感じだな

113:デフォルトの名無しさん
15/12/01 15:32:51.36 fXKlxJmK.net
TypeScriptはその名の通りJavaScript+型なんだからTypeScript固有の話題なんて
もうそんなにないだろ
最新の話題は>>108のブログ�


114:セけ見てれば十分 言語機能を詳しく知りたい場合は公式のHandbookがスゲー良く出来てるからそれで十分



115:デフォルトの名無しさん
15/12/02 00:09:29.85 et2ufdl8.net
コンパイル速度遅くなってきたらしいな
さもありなん

116:デフォルトの名無しさん
15/12/05 15:39:17.84 m9DZhLZL.net
実際アプデしたらクッソ重くなってた
IDEがプチフリして困る

117:デフォルトの名無しさん
15/12/06 02:00:29.98 FcGW3Qzp.net
>>108
TypeScript 1.7.3 変更点
URLリンク(qiita.com)

118:デフォルトの名無しさん
15/12/06 22:16:12.04 NQ6kkq7S.net
Microsoft、「Edge」のJavaScriptエンジン「Chakra」をオープンソース化へ
URLリンク(www.itmedia.co.jp)

119:デフォルトの名無しさん
15/12/08 13:43:53.13 sEPoyyCj.net
>>113
間違いとか中途半端な内容が多いな
取り合えず 2 ** 3 は 2 * 2 * 2 に展開される
整数同士は掛け算に展開して浮動小数点数は Math.pow() を使うようになる
要するに整数のべき乗を整数のままにしておけるという事だな

120:デフォルトの名無しさん
15/12/08 15:25:18.45 sEPoyyCj.net
>>115
少し補足
右側が変数になってる場合も Math.pow() になった

121:デフォルトの名無しさん
15/12/10 23:32:50.70 V7ddkloI.net
3.14 ** 3 は 3.14 * 3.14 * 3.14 にするよりも pow のほうが早いのか

122:デフォルトの名無しさん
15/12/11 00:19:45.18 5K+qhLiA.net
>>117
どうでもいいけどπを3乗するなんて事は無いけどな
ルートの中に入ることはある

123:名無しさん@そうだ選挙に行こう
15/12/14 18:49:41.54 R3y1X6jx.net
URLリンク(www.typescriptlang.org)
以下のコードが実行時エラーになる
意図したものなのかな
function f() {
 const Math = void 0;
 console.log(2 ** 3);
}
f()

124:デフォルトの名無しさん
15/12/15 13:48:49.14 uFHp5xJr.net
>>119
const Math = void 0;
だとMathがany型になってるからそもそも何やってもコンパイルエラーにはならない
const Math = 1;
console.log(Math.pow(2, 3));
だとコンパイルエラーになるが
console.log(2 ** 3);
がコンパイルエラーにならないのはバグだな
ちなみに1.7のプレリリース版だと2 ** 3は2 * 2 * 2に展開されてた気がするが
1.7.3だと無難にMath.pow(2, 3)のままだな…

125:デフォルトの名無しさん
15/12/17 17:40:37.59 z/Lx0cXl.net
typescriptを書くときの環境みたいなのを教えてください
そういう記事があったら教えてください
webpack?とかpackage.txtとか開発初めのスケルトンが知りたいです

126:デフォルトの名無しさん
15/12/17 19:05:38.17 Szn4FINI.net
VisualStudio
Azure

127:デフォルトの名無しさん
15/12/17 22:15:57.04 CSxzQpIQ.net
まずエディタを何使いたいかによるな
何でもいいなら無難にVS使うのがいいと思われる
最近ならVisual Studio Codeの方がいいかもしれない

128:デフォルトの名無しさん
15/12/18 17:31:03.70 uEIUGuN6.net
VSCodeは.git/とtsconfig.jsonが同じフォルダなのが前提だな…
そうでない場合も多い気がするけどな
ちょっと試用してみたけど上記の問題以外はTypeScript用エディタとして快適に使える

129:デフォルトの名無しさん
15/12/18 18:00:03.96 eorQTm9j.net
VSCodeに移行したいけどvimが未完成すぎてまだ移行できん
はよVSと同じクオリティに仕上げてくれ

130:デフォルトの名無しさん
15/12/18 19:49:07.87 HYHORn7l.net
おもいっきりスレ違いだけどVSCodeの完成度の高さにびっくり
golang開発環境としても最適。マイクロソフトの開発力の高さを目撃したぜ。
一気にATOMより使いやすくなりやがった。
typeScriptも期待していいね

131:デフォルトの名無しさん
15/12/18 20:01:03.80 uEIUGuN6.net
VSCodeの完成度の高さの半分はTypeScriptで作ってるからと言えなくもない
残りの半分はGoogleのChromiumとV8のお陰だが…

132:デフォルトの名無しさん
15/12/19 01:32:25.74 AUMngiLG.net
最近のマイクロソフトはC#と並んでNode.js推しが凄いね
次期ASP.NETのビルドシステムもNode.js系
Node.jsの普及に社運をかけているような感じがする

133:デフォルトの名無しさん
15/12/19 06:11:40.64 2wysK+Et.net
MSは自社のJavaScriptエンジンがあるから別にNode.jsを推してるとは思えない
単にNode.jsを使わざるを得ない状況ってだけじゃないかな
現状色んなアプリが別個にNode.jsのランタイムを含めてて無駄過ぎるから
WindowsだったらEdgeとかChakraを使うバージョンがあってもいいと思う

134:デフォルトの名無しさん
15/12/19 08:29:23.06 2BX5Ngj+.net
MS自身自社プロダクトのクロスプラットフォーム化を進めてるのにそんな逆行したいわけがない

135:デフォルトの名無しさん
15/12/19 13:18:54.15 2CKHjxE+.net
Node.js はオワコンなのにね

136:デフォルトの名無しさん
15/12/19 15:19:47.28 2BX5Ngj+.net
持ち上げられすぎてると思うけどそこまで終わってもない
それよりエレクトロンがモノになるかのほうが不安

137:デフォルトの名無しさん
15/12/19 17:24:55.88 saKWMtLf.net
chakra対応のnode出したりcoreをossにしたりでv8で満足してるわけでもなさそう

138:デフォルトの名無しさん
15/12/20 03:32:05.22 3pTsyfVL.net
>>131
Node.jsがオワコンとか初めて聞いたよw
JavaScriptが標準規格だから実装が何になろうがいいけど
今のところNode.js以外の使い易い実装がないのが現実
まさかとは思うけど>>131はio.jsの事を言ってたりするのか?

139:デフォルトの名無しさん
15/12/20 19:25:20.77 oiJlcETb.net
オワコンかどうかはわからないけど、jsフロントエンド周りは
変化が早すぎてついていける人が少ないのは確か。
ビルドツールすらなんでそんな変わっていくん?
いっそmakeでいいんじゃないか。
早くデファクトスタンダードでてくんないかな。
Meteorは完全にjs界から見放されているような気もする。(日本だけ?)

140:デフォルトの名無しさん
15/12/20 22:47:15.85 ZI2XTWWE.net
GUIツールや、ビルドツール、SSRあたりは残るんじゃないかな。
apiサーバやさらにバックエンドは今より減っていきそうだけど。

141:デフォルトの名無しさん
15/12/21 11:04:35.60 1HvlxK+M.net
Dartがもう少し頑張ってくれてりゃなぁ

142:デフォルトの名無しさん
15/12/21 11:44:53.03 +DAq0mOu.net
よくAltJSの括りでDartとかと一緒にされるけどTypeScriptはDartと別モンだと思う
TypeScriptは9割は(特にES6以降の)JavaScriptといっても過言じゃないけど
Dartは全然別の言語だし
Webの世界でJavaScript以外の言語が流行るとは全く思えない

143:デフォルトの名無しさん
15/12/21 14:21:33.13 1HvlxK+M.net
javascript無くなってくれないかな
TypeScriptが橋渡しになって引導渡して欲しい

144:デフォルトの名無しさん
15/12/23 16:53:14.82 YbqFKYTK.net
>139
それはつまり「IEもChromeもFirefoxもSafariも、既存サイトのJavaScriptを解釈しないようにしろ」ってことだろ
無理だな

145:デフォルトの名無しさん
15/12/23 21:21:43.04 Gmfz59Yf.net
>>139
なんかgoogleとかmozilaとかが共同でバイナリをBrowserで動かす仕組みを
開発するとかいってなかったっけNaCLじゃない奴。
それが実現したらそうなるんじゃない

146:デフォルトの名無しさん
15/12/23 22:12:53.38 VUxrNHJY.net
>>141
WebAssemblyだな
主目的はC++のコードを安全にかつネイティブ並に高速に動かす為のものだ�


147:ェ 他の言語を動かす基盤にも十分成り得る ただ現状でもJavaScriptに変換すれば似たような事にはなってるのに 他の言語が流行ってないから結局今と一緒でしょ



148:デフォルトの名無しさん
15/12/23 23:08:22.22 0c+BTX7l.net
JavaScriptでは難しい最適化を施した多言語から生成できる共通の中間コードの仕様策定だっけ?
デバッグが難しいだろうからほとんどCPUヘビーなとこと広告回避にだけ使われてほかはJavaScriptのままだと思うよ

149:デフォルトの名無しさん
15/12/23 23:29:17.65 37J5CESF.net
>>143
基本ゲーム用だ
WebGL2になるとPS3以上PS4未満の能力があるからWebAssemblyと組み合わせて
ブラウザをゲームプラットホームにしようという思惑がある

150:デフォルトの名無しさん
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でも利用可能です(接続数は



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