TypeScript part2 [転載禁止]©2ch.net

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

TypeScript lets you write JavaScript the way you really want to.
TypeScript is a typed superset of JavaScript that compiles to plain JavaScript.
Any browser. Any host. Any OS. Open Source.

前スレ
http://peace.2ch.net/test/read.cgi/tech/1349187527/
2015/12/23(水) 22:12:53.38ID:VUxrNHJY
>>141
WebAssemblyだな
主目的はC++のコードを安全にかつネイティブ並に高速に動かす為のものだが
他の言語を動かす基盤にも十分成り得る

ただ現状でもJavaScriptに変換すれば似たような事にはなってるのに
他の言語が流行ってないから結局今と一緒でしょ
2015/12/23(水) 23:08:22.22ID:0c+BTX7l
JavaScriptでは難しい最適化を施した多言語から生成できる共通の中間コードの仕様策定だっけ?
デバッグが難しいだろうからほとんどCPUヘビーなとこと広告回避にだけ使われてほかはJavaScriptのままだと思うよ
2015/12/23(水) 23:29:17.65ID:37J5CESF
>>143
基本ゲーム用だ
WebGL2になるとPS3以上PS4未満の能力があるからWebAssemblyと組み合わせて
ブラウザをゲームプラットホームにしようという思惑がある
2015/12/23(水) 23:51:10.03ID:0c+BTX7l
>>144
マジかよソニー株売ってくる
2015/12/23(水) 23:52:52.11ID:YbqFKYTK
>144
それChromeBook持ってるGoogleの一人勝ちになるんじゃないか
2015/12/23(水) 23:57:52.58ID:0c+BTX7l
日本一みたいな小粒の尖ったソフト出すメーカーはこういうのでコストかけずにどんどん出していったほうがいいんだろうな
2015/12/25(金) 02:26:54.28ID:87NUqkxQ
TypeScript1.8以降で追加予定または協議中の注目の新機能12つ
http://falsandtru.hatenablog.com/entry/typescript-2016
2015/12/25(金) 10:26:24.39ID:qQE0KVCc
noImplicitReturns最高
2015/12/25(金) 13:17:18.21ID:zNppH846
1.7でも戻り値の型が違うとエラーになるけどnoImplicitReturnsの説明見ると
結構すり抜けるパターンがあったんだな…
全部undefined関連だけど最初からエラーにしとけよ
2015/12/25(金) 13:34:53.88ID:zNppH846
あとreadonlyはなぜ
function hoge(readonly a: number) { }
と書けないんだよ…
メンバーより引き数に指定出来る事の方がはるかに重要だ

他は劇的に便利になるようなものはないな
2015/12/25(金) 14:43:14.41ID:ISLz7uba
うんこの上に金粉まぶしてもうんこはうんこ
2015/12/25(金) 15:03:46.23ID:9XEpf0Yk
>>151
numberにreadonlyを指定することは意味がないと思うが…

引数がreadonlyであることを表明したいなら
そういうinterfaceを定義すれば済む。現行機能で十分じゃないか?
指定子で表明するのはC++がconstで失敗した道だからなぁ
2015/12/25(金) 17:02:40.14ID:zNppH846
>>153
あー無意味なこと書いてしまった…numberじゃなくて何らかのクラス名だった

ちなみに
function test(readonly v: Data/*参照しかしない事を表明*/): boolean { }
をしたいだけなのに
function test(v: {readonly x: number, ...全部書くのか?): boolean { }
とすればいいという事か?
2015/12/25(金) 17:36:17.11ID:9XEpf0Yk
>>154
「特定のメンバーしか見ない」と表明したいならそうなるんだろうね
もしくは最初からインタフェースを分けておくか
interface ReadOnlyData { get; }
interface Data extends ReadOnlyData { set; }

単純なフィールドの読み書きだけならいいけど
getXXX() は readonly だよねとか
getXXX() の中でキャッシュ値が変化するけど実質的には readonly だよねとか
やりだすと、C++の悪夢がよみがえってしまう
2015/12/25(金) 18:43:03.80ID:zNppH846
>>155
そりゃ悪夢だろ
なんでクラス定義する側がそんな苦労しないといけないんだ
ちなみに
class Hoge {
int getXXX() const;
mutable Cache cache;って知ってるか?
こうしておけば何か気にする事なんてあるか?
2015/12/25(金) 18:47:18.76ID:zNppH846
補足
class Hoge {
int getXXX() const; ← これはcacheの中身は書き換える
mutable Cache cache; ← これが書き換わってもconst性に影響無いと考える
2015/12/25(金) 23:14:17.73ID:b7pvx0AF
>>153
何が失敗だったの?
C++でconst無かったら怖くてかなわん…
2015/12/25(金) 23:40:33.36ID:DXbDvcZw
>>151
利用する側に重要な情報だよな。
2015/12/26(土) 00:31:22.25ID:iwceh6a5
C++でconstに問題あるなんて素人のたわごとだろ
聞いたこと無い
2015/12/26(土) 00:39:17.52ID:iwceh6a5
C++で仕事を15年以上して凄い奴とかどうしようもない奴とか色々見てきたけど
constに問題があるとか初めて聞いたよ
2015/12/29(火) 02:41:33.95ID:cehhvXHA
VSCodeがいつの間にアップデートしてて>>124の問題が早速修正されてるな
オプソにした事でユーザーが増えて沢山突っこまれたに違いない
もはやTypeScript最強エディタと言わざるを得ない
2015/12/29(火) 02:55:10.34ID:cehhvXHA
最近やっとNode.jsとブラウザの両方で使えるコードの書き方が分かったよ
TypeScriptオンリーだったらtsc --module amdとrequire.jsがあればいいし
JavaScriptを使う場合はwebpack使えば出来た

俺はTypeScriptの時でもリリース時にwebpack使って開発中はrequire.jsで
個別にファイルを読み込んだほうがデバッグしやすいからそうしてる
ちなみに///<reference path='hoge.ts'/>とかmoduleやnamespaceは全く使わない
それが今のトレンド (VSCodeのソースがそうしてる)
164デフォルトの名無しさん
垢版 |
2015/12/29(火) 16:10:58.92ID:O/+FVQhq
そりゃそうだ
165デフォルトの名無しさん
垢版 |
2016/01/03(日) 18:07:55.32ID:CSCP9BIo
だれかわかるやつ教えてくれ...

親クラスのstaticメソッドを子クラスでoverrideすると、
実行していない状態でもなぜか親クラスのstaticメソッドが実行されてしまうんだが、これはなぜなんだ...

一応ソースだけ張ってみる。


/// <reference path=
166デフォルトの名無しさん
垢版 |
2016/01/03(日) 18:14:12.59ID:CSCP9BIo
すまんこれ

http://s1.gazo.cc/up/169919.png
2016/01/03(日) 23:49:46.81ID:4W+1xUXu
>>165
ecmascriptの方の話?
https://github.com/google/traceur-compiler/blob/master/src/runtime/classes.js
168デフォルトの名無しさん
垢版 |
2016/01/04(月) 00:03:32.03ID:tFJ0VkMO
>>167

おお、ありがたい。
明日ちょっと見てみるわ。

どうもextendsするときに実行しちゃっているみたいだから、そういう仕様なの?とも思ったんだがいまいちわからんくて...
コンパイル結果のjsも明日張ってみるわ

今日はもう寝る
2016/01/04(月) 09:26:22.97ID:B4Y3MO4F
>>168
console.log(Asian.name);
console.log(Asian.name = "New type");
console.log(Asian.name);

nodeだとname propertyは再定義できないと言われるが
2016/01/04(月) 12:16:27.68ID:WW+fICsN
>>166
これはおもろいw
--target ES5のクラス継承は__extendsでいわゆるクラスを模したイディオムを
実行する訳だけど、その時にHuman.nameを読み出してるからその中で
console.log()みたいな副作用のあるコードを書いてるとちょろっとお漏らし
しちゃうんだな
ま、getに副作用のあるコードを書くなって事だな
副作用が無ければ気にする事はない
171デフォルトの名無しさん
垢版 |
2016/01/04(月) 21:24:41.15ID:tFJ0VkMO
これが生成された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.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;
})();
172デフォルトの名無しさん
垢版 |
2016/01/04(月) 21:25:29.78ID:tFJ0VkMO
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を代入しているような気がするんだけどダメなんだなぁ
173デフォルトの名無しさん
垢版 |
2016/01/04(月) 21:27:50.70ID:tFJ0VkMO
>>170

なるほど、やっぱり一応「仕様」なのね。

http://visible-true.blogspot.jp/2013/01/typescript-bridge-pattern.html
ここを参考に抽象クラス書いてみようとしたら毎回エラーになったのがきっかけで気づいたんだ。

普段は副作用のないコードを書くようにしてるから問題ないけど、気持ち悪いな...
2016/01/04(月) 21:29:44.16ID:jSUxRRs2
console.log(Asian.name);
をもう一度実行
175デフォルトの名無しさん
垢版 |
2016/01/04(月) 21:58:10.67ID:tFJ0VkMO
>>174
最後のconsole.log(Asian.name); をふたつにするってこと?

↓こうなるだけだけど...そうじゃなくて?

Human class name
Asian class name
ass
Asian class name
ass
176デフォルトの名無しさん
垢版 |
2016/01/04(月) 22:06:12.44ID:tFJ0VkMO
>>172
うぉお自己レスだがいまさら理解
definePropertyにアクセスするとgetのfunctionが実行されるから、
extendsのときの代入で実行が走ってるのね

超すっきりしたわ
なるほどね
177デフォルトの名無しさん
垢版 |
2016/01/04(月) 22:18:27.58ID:tFJ0VkMO
いやまてこれダメじゃねーか
getterちゃんと継承できてねーぞ

...できてねーよな?
2016/01/05(火) 00:16:07.40ID:JRpiyNmr
上書きしなきゃ親のが呼び出されるでしょ
2016/01/05(火) 04:38:20.48ID:uTMnp3Vg
https://github.com/Microsoft/TypeScript/issues/1520

存在しないユースケースだから修正しない。
使いたければ__extends関数を自作してオーバーライドしろとさ。
2016/01/05(火) 13:11:51.67ID:FYDa5kHc
>>178
継承されてないな

まず最初に言っておくけどAsian内のgetを消すとAsian.nameは
Function.nameにアクセスする事になってAsianと表示されるからfuncとかにしておく
そうするとhomoとだけ表示されてHuman class nameは表示されないから継承されてない

ちなみに--target ES6の場合はconsole.log('Human class name');が実行されて
なおかつ継承もされない
要するに現状でES6と同じ挙動という事になるから自前の__extendsを作ると
将来ES6でコンパイルした時に困る事になる (継承をカスタマイズ出来ないし)

現状で問題の無いコードを書くしかないというのが結論だな
2016/01/05(火) 13:24:39.62ID:FYDa5kHc
ES6のclassは__extendsでやっている事のシンタックスシュガーだってのが
分かるおもしろい例だった
結局ES6になってもプロトタイプベースのオブジェクト指向っていうところは
変わってないんだよね
2016/01/06(水) 08:53:19.05ID:Fwd934PG
>>179
神だ、やっと神と、、、!
ありがとう!

ユースケースがないってのはちょっとひっかかるけどな。
キーワードstaticってクラスに属してるだけでstatic getが副作用を起こさない、他の影響をうけないって保証されてるわけじゃないし。
そう書けってことではあるんだけどね。
2016/01/18(月) 13:03:11.26ID:ELUPuNqk
MSYS上のvimからtsuquyomi使えんかった
多分Nodeがマウントされたパスとか/c/から始まるパスを理解できないんだろうな
MSYS版Nodeがあればなぁ
2016/01/18(月) 17:46:53.97ID:ELUPuNqk
よく見たらmingw側にNodeがあったので試してみたけどバージョンが古いせいか駄目だったぜ
TypeScript書くときは大人しくGVimにしておくか
2016/01/22(金) 13:05:16.12ID:yW17RJ8f
ChakraCoreを使ったNode.jsが動いたらしい
しかし最近のMSはプロジェクト名にCoreを付けまくってるな
2016/01/23(土) 10:08:20.25ID:ym0h+5An
--module commonjsの状態でmoduleとnamespaceを使わずに
export function ...
export var ...
って書いたソースがcommonjsのモジュールとしてコンパイルできるのに
外部からimportしようとするとモジュールが見つからないって怒られて困った
--module amdだと大丈夫みたいなんだけど、バグだったりするの?
2016/01/23(土) 12:35:34.21ID:xXuhphCo
公式のwiki読め
2016/01/23(土) 17:32:00.25ID:ym0h+5An
import時のパスが./で始まるかどうかの違いでした
import * as test from "test"; // amdはOK, commonjsはエラー
import * as test from "./test"; // amd, commonjs 共にOK
test.tsを./node_modulesに突っ込んで--moduleResolution nodeなら前者もOK
2016/01/24(日) 10:30:33.12ID:jiNDRvMm
必読https://github.com/Microsoft/TypeScript/wiki/FAQ
2016/01/25(月) 13:40:35.40ID:ipEE3CyC
TypeScriptのモジュールの扱いが激烈に難解になったからみんなハマルだろうな
俺は大体理解できたけど
2016/01/25(月) 13:50:19.91ID:FKcC8XYP
苦笑
2016/01/25(月) 14:01:32.82ID:ipEE3CyC
>>191
そんなおかしいなら --moduleResolution の意味を言ってみてよ
2016/01/25(月) 14:05:44.07ID:ipEE3CyC
>>191
あと、 --moduleResolution node で認識される*.d.tsの書き方も言ってみてよ
これドキュメントに書いてないんだよな
2016/01/25(月) 14:22:21.52ID:ipEE3CyC
http://qiita.com/vvakame/items/72d22e33632178f7db24
この人の↑これを見るのが一番まとまってて分かり易い
> ・declare module "hoge" 形式の定義は利用できない
って書いてあるけど実際はもう少し修正しないと駄目だった
とりあえず適当に修正すれば通るように出来るけど何が問題なのか
ドキュメントが見つからず確証が持ててない
2016/01/25(月) 17:21:06.80ID:FKcC8XYP
みんなはcommonjs使うからハマらないっての
クイズじゃなくて何がしたくてできないのかのほうを書けよ
2016/01/25(月) 19:30:10.53ID:ipEE3CyC
>>195
>>194の話はcommonjsとか関係無いよ、モジュール全般の話でしょ
それにブラウザからcommonjsロードできないのにみんな使うってのはおかしいでしょ
2016/01/25(月) 21:26:21.10ID:FKcC8XYP
貴殿の力量、拝察して候
2016/01/26(火) 10:19:05.81ID:kKfPXzbs
JavaScriptから来た人には歴史的経緯と後付モジュール機構は常識の部類なんだろうけど、他言語からくるとjs/tsのモジュール関係は病んでるよな
2016/01/26(火) 14:10:10.49ID:pw0cS8Zr
>>197
最後にはそれかよw
ちゃんと具体的に書いてくれないと完全に負け惜しみにしか聞こえないよ
2016/01/26(火) 14:24:44.17ID:pw0cS8Zr
>>198
TypeScriptには内部モジュール(内部は造語)があって外部モジュールについては
あまり重要視されてなかった経緯があるからね
module→namespaceって名前を変えたけどmoduleキーワードは今も使える
もはや混乱の元でしかないし<<<reference file="hoge"/>ももはや役割を終えてるからなくした方がいいな
で、importの意味が1.6でしれっとそれより前の解釈と思いっきり変わってしまったのが混乱の元だ
とりあえずVSCodeのソースを見れば最近の*.tsの書き方が分かる
俺はそれ見て同じ書き方をしようとしてmodule,referenceから移行しようとして
importがトンでもない事になってる事にやっと気付いた
2016/01/26(火) 14:38:18.32ID:HDdwtYdo
requireからES6 modulesまでの変遷は確かに知らずに見ると混乱する
NodeのStreamAPIと違ってES6 modulesで古い情報にフィルタかけられるのが救い
2016/01/26(火) 15:03:49.80ID:pw0cS8Zr
>>197みたいにNode.jsオンリーで歴史的経緯も知らずにnpm installだけして
使ってる人にはimportでハマルとか言ってる奴はプッっとしか思わないんだろうね
ま、そういう奴が居るって事は1.6の変更は意味があったといえる

俺は1.0ぐらいからブラウザ用にmodule,referenceでゴリゴリ書いてたから
移行するのがスゲー大変だった
しかし、お陰で汎用的な機能はNode.jsとブラウザの両方で使えるように
書けるようになったから移行する意味はあった(それにES6のmoduleにも対応してるはず)
2016/01/27(水) 12:12:11.54ID:ChRzt0VQ
webpackとか使うとjsの場合以下のようにtemplateとしてhtmlコードを取り込むことができますが、

```
export default {
template: require('./index.html'),
}
```

typeScript単体で使う場合で似たようなことをする方法ってありますか?
2016/01/27(水) 14:52:35.66ID:H1ToiAO7
>>203
1.6からjsxに対応したからとりあえず typescript jsx で検索してみなよ
それが目的のものかは分からんけど
2016/01/29(金) 14:25:20.13ID:EB80mx/+
https://twitter.com/bterlson/status/692489384654999552

ES2016 will likely not contain async functions.
2016/01/29(金) 17:10:41.49ID:LlSYvxYC
安心してください、TypeScriptはasyncが使えます
2016/02/05(金) 16:04:12.96ID:7HipHDXr
TypeScript 1.8ベータにはJavaScript統合、シームレス関数コンポーネントなどが追加される
http://www.infoq.com/jp/news/2016/02/announcing-typescript-18
2016/02/06(土) 01:27:25.39ID:Krz+De6m
>>207
Announcing TypeScript 1.8 Beta
https://blogs.msdn.microsoft.com/typescript/2016/01/28/announcing-typescript-1-8-beta/

TypeScript 1.8.0-beta 変更点
http://qiita.com/vvakame/items/31f5c45ff49de67d5634
2016/02/12(金) 11:57:21.91ID:tB/7lfI+
typeScriptでつくられたOSSなプロダクトって何があるのかな。
typeScriptの勉強に使えそうな手軽なサイズのものがいいんですが
特にVSC以外で
2016/02/12(金) 12:46:41.49ID:whWT7zC/
vs版1.7.6を入れたのにバージョン情報では
1.7.5と表示されるんだけどミスってる?
npm installでも1.7.5だった
2016/02/12(金) 21:36:59.74ID:tB/7lfI+
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が必要みたいな記述になっています
定義の参照先が違うせいだと思うんですが直し方がわかりません。ご教示下さい

参考
https://developer.mozilla.org/ja/docs/Web/Guide/Performance/Using_web_workers
2016/02/12(金) 22:34:57.47ID:0bFQuZrs
ES以外の定義が違うなら自分でプルリク出さないと直らないぞ
DOM周りは基本放置だからな
2016/02/12(金) 23:19:19.89ID:DcD4rrQS
1.7.5に入ってるlib.webworker.d.tsには
WorkerインターフェースにpostMessage(message: any, ports?: any): void
グローバルにpostMessage(data: any): void
ってなってるけど
2016/02/13(土) 12:50:38.42ID:SL3t4ard
>>213
先頭行に
/// <reference path="lib.webworker.d.ts" />
と入れてもエラーが出るんですが、どうすればいいんでしょう

error TS6053: File 'lib.webworker.d.ts' not found.
2016/02/13(土) 16:34:47.12ID:DMjW/lz+
https://developer.mozilla.org/ja/docs/Web/API/Window/postMessage
https://developer.mozilla.org/en-US/docs/Web/API/Worker/postMessage
を見ても第2引数は必要
引数要らないバージョンは
https://developer.mozilla.org/en-US/docs/Web/API/MessagePort/postMessage
のMessagePort用だな
2016/02/13(土) 16:42:47.45ID:DMjW/lz+
いや間違えた…
window.postMessage以外は第2引数が省略可能だな
ただwindow.postMessageも第2引数を省略すると"*"が指定された時と同じ動作をするように
ブラウザが勝手に対応してるっぽいな
格オブジェクト毎に微妙に役割りが違うものを全部一緒くたにpostMessageにしてるから
結構ややこしい事になってるな…
とりあえず>>214はwindow.postMessageを使ってるのであれば
第2引数に"*"を指定すればいいはずだよ
2016/02/13(土) 16:44:08.08ID:DMjW/lz+
格オブジェクト→各オブジェクト 念の為…連投スマン
2016/02/13(土) 17:00:54.46ID:DMjW/lz+
何度もごめん
やっと本質が理解できた
根本的な解決には2.0にならないとダメらしいな
それまではpostMessageには"*"とかundefinedを指定して誤魔化すのが一番手っ取り早い
2016/02/14(日) 10:23:55.62ID:+Fbk6tbu
いえ。聞きたいことは
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ファイルに対してのリファレンスの貼り方を教えていただきたいのです。
2016/02/14(日) 10:35:21.09ID:wvAk6z1k
>>219
https://github.com/Microsoft/TypeScript/wiki/Roadmap
の2.0にあるImprove lib.d.ts modularityがそれを簡単にやる為のものらしい
要するに今のところそういう事が簡単に出来無いってこと
http://blog.scottlogic.com/2015/08/10/ts-vs-proj.html
この辺に一応回避方法が書いてあるよ
2016/02/14(日) 13:52:50.82ID:+Fbk6tbu
>>220
情報ありがとうございます。
とりあえず

```
(<any>postMessage)(workerResult);
```
と書いてエラー抑制で回避することにします。
2016/02/14(日) 17:38:32.66ID:lb9byLOu
いい方法が見つかるまではtsconfig.jsonの"files"にlib.*.d.tsのパスを入れておけばいいよ
tsconfig.jsonの書き方と使い方は公式Wiki参照
2016/02/19(金) 17:13:14.79ID:YBiR9mLr
NonNullableきたこれでかつる
224デフォルトの名無しさん
垢版 |
2016/02/23(火) 10:35:12.67ID:6s2CAaJ0
Announcing TypeScript 1.8
https://blogs.msdn.microsoft.com/typescript/2016/02/22/announcing-typescript-1-8-2/
2016/02/23(火) 11:46:00.00ID:UPC5owG9
>>224 おつ
TypeScript for Visual Studio 2015 は Details > Releases から 1.8.4 を選ばないと
以前のものがダウンロードされるので注意。

あと Visual Studio Code のインテリセンス等の挙動は
tscへのパスの差し替えだけでは完璧ではないぽい。なにか方法があるかもしれないが
2016/02/23(火) 12:25:15.11ID:MgSDdSDU
VSCodeは自前でtsserver.jsを持ってるからそれを差し替えないと駄目でしょ
下手に差し替えないでバージョンアップを待てばいいんじゃね?
すぐするでしょ
2016/02/23(火) 12:28:20.34ID:MgSDdSDU
ちなみにメインで使ってるわけじゃないけど、なんかVSCodeって使いづらいような気がしてきた
バージョンアップで改善されてくとは思うけど、メインで使ってる人は使い心地がどうなのか知りたい
2016/02/24(水) 19:37:32.88ID:cGyLx1gy
for (let i = ...) は許されるのに
if (let o = ...) や while (let ...) が許されないのは仕様でしょうか?
nullスキップをしたいときにこの書式を使いたい場合が結構あるのですが
2016/02/24(水) 21:55:18.34ID:aRwJuOw8
仕様。仕様書見れば書いてあるよ
let o;
if (o = ...) と書いても結果は変わらないと思う
o がブロックの外に漏れるというだけで
2016/02/24(水) 23:27:54.96ID:cGyLx1gy
>>229
元のJavaScriptや、もしかするとJavaに倣った仕様なんですかね
どうせJavaほど真偽判定に厳しくないんだから、C++並に緩くして欲しいなぁ
2016/02/25(木) 10:03:46.85ID:pumiDuUu
>>230
仕様ってのはecma262(JavaScript)の事ね
TypeScriptはJavaScript(主にES6以降)+型だからJavaScriptの文法を壊すような
機能追加はしちゃ駄目だと思うし、そういうのはほとんど無いと思う
2016/03/03(木) 15:07:54.17ID:RrjC3Y1y
chrome extensionの開発にtypeScript使っています。
型があるとドキュメントを見なくてもメソッドとかプロパティを探せるので
捗ります。

本当にES2015 + type って感じなんですね。そんなに仕様が分かっていなくても何となく使えるのがいいです。

一つお聞きしたいのですが
Node型からlengthプロパティを使いたいのですが
参照先にlib.d.tsにはないみたいでエラーなります。
chromeデバッカでは見えているのですが、、、
とりあえず以下のように回避しているんですが

const selection = window.getSelection()
(<any> selection.focusNode).length

本来の対応方針を教えて下さい。
例えばどこかに専用のファイルを作ってそこで
interface Node {
}
自分用のinterfaceを作るとかですかね?
2016/03/03(木) 15:39:48.75ID:tDWJCpRY
>>232
Node.length って何? すべての Node は持っているわけではないと思うが
エレメントの種類が限定できるなら <any> のところにそのクラス名を書けば?
2016/03/03(木) 17:00:58.63ID:RZS145YN
babelとtypescriptって何が違うの?
あとes6が普及したらtypescript使う意味ってなくならない?
2016/03/03(木) 17:04:13.70ID:RrjC3Y1y
>>233
すいませんでした
lengthプロパティはNodeインターフェースにあるのが正しいのかと勘違いしてました。
Element型にキャストして使うことにしました。
2016/03/03(木) 17:11:25.26ID:RrjC3Y1y
>>234
ES2015 + 型という図式です。
VSCとかと連携すると補完が聞いて素敵です。
EcmaScriptに型が付く予定はないと思うので差別化はできているのではないでしょうか?

逆に言語として学習コストが低くていいのではないかと(ES2015とあんまり変わらない点)。
特に新規のライブラリを使うときはEditorが教えてくれるので、凄くいいです。
2016/03/03(木) 17:29:33.07ID:tDWJCpRY
>>235
Element型にもlengthってあったっけ…

>>234
es6が普及した場合、むしろBabelがその役割を終える

TypeScriptと競合するのは、JSDocの型注釈 @type かな
JS+JSDocの記述量を減らしたのがTypeScriptだと思う
2016/03/03(木) 18:49:06.70ID:9M5RRL5I
>>235
ちゃんとリファレンスは読んだのか?
https://developer.mozilla.org/ja/docs/Web/API/Selection
2016/03/04(金) 16:37:36.83ID:5mk497Pl
ちなみにjQueryでDOMをいじくるのが主な目的の人には向かないね
jquery.d.tsがany使いまくりだから素直にJavaScriptをそのまま使う事を勧める

それとDOMはJavaScriptとして使ってる内は気付かないけど
実はかなり型が複雑で理解してないと>>232みたいな問題にぶつかる
悪いのはTypeScriptではなくて元の仕様がそうなってる

直接DOMをいじる場合も型をちゃんと全部把握するかJavaScriptをそのまま使う方がいい
2016/03/04(金) 17:04:24.90ID:JX9S2zww
>>239
むしろ型を把握していない人ほどオススメなのでは。
Editorが教えてくれるようになるし
実行時にエラーになってデバッガでチェックというサイクルを何度も踏む手間が省ける。
2016/03/04(金) 17:55:19.19ID:5mk497Pl
>>240
いやいや、例えばgetElementById()で返すのはHTMLElementだけど
これはlib.d.tsでextends HTMLElement検索すると分かるけど、全てのベースクラスだから
使う時は毎回適切にキャストする必要があって面倒臭い
で、間違うとコンパイルエラーとか実行時エラーになる

ちなみにjQueryとDOMでの話であって一般的には型があった方がいいのはその通り
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

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