TypeScript part2 ..
[2ch|▼Menu]
2:デフォルトの名無しさん
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が副作用を起こさない、他の影響をうけないって保証されてるわけじゃないし。
そう書けってことではあるんだけどね。


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

1136日前に更新/265 KB
担当:undef