X



TypeScript part2 [転載禁止]©2ch.net
■ このスレッドは過去ログ倉庫に格納されています
0102デフォルトの名無しさん
垢版 |
2015/11/24(火) 18:49:02.47ID:qZ9OT4oo
>>101
トレンドってのは完全に主観だ
そもそもデスクトップアプリを作る機会があまり無いと思われる
あとブラウザで動くJavaScriptとNode.js用のコードはモジュールの問題とか
色々相容れないものがあって両対応させるのは難しい
この辺はES6のModuleが普及すれば多少は改善するのかね
0103101
垢版 |
2015/11/24(火) 22:30:19.95ID:7M39MrWo
>>102
レスありがと。
納得+同意。
0109デフォルトの名無しさん
垢版 |
2015/12/01(火) 15:22:54.15ID:fXKlxJmK
今回の機能追加はAsync/Awaitとポリモthisぐらいか
1.8も言語機能の追加は小規模だからだいぶ仕様が安定してきた感じだな
0110デフォルトの名無しさん
垢版 |
2015/12/01(火) 15:32:51.36ID:fXKlxJmK
TypeScriptはその名の通りJavaScript+型なんだからTypeScript固有の話題なんて
もうそんなにないだろ
最新の話題は>>108のブログだけ見てれば十分
言語機能を詳しく知りたい場合は公式のHandbookがスゲー良く出来てるからそれで十分
0115デフォルトの名無しさん
垢版 |
2015/12/08(火) 13:43:53.13ID:sEPoyyCj
>>113
間違いとか中途半端な内容が多いな
取り合えず 2 ** 3 は 2 * 2 * 2 に展開される
整数同士は掛け算に展開して浮動小数点数は Math.pow() を使うようになる
要するに整数のべき乗を整数のままにしておけるという事だな
0118デフォルトの名無しさん
垢版 |
2015/12/11(金) 00:19:45.18ID:5K+qhLiA
>>117
どうでもいいけどπを3乗するなんて事は無いけどな
ルートの中に入ることはある
0120デフォルトの名無しさん
垢版 |
2015/12/15(火) 13:48:49.14ID:uFHp5xJr
>>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)のままだな…
0121デフォルトの名無しさん
垢版 |
2015/12/17(木) 17:40:37.59ID:z/Lx0cXl
typescriptを書くときの環境みたいなのを教えてください
そういう記事があったら教えてください
webpack?とかpackage.txtとか開発初めのスケルトンが知りたいです
0123デフォルトの名無しさん
垢版 |
2015/12/17(木) 22:15:57.04ID:CSxzQpIQ
まずエディタを何使いたいかによるな
何でもいいなら無難にVS使うのがいいと思われる
最近ならVisual Studio Codeの方がいいかもしれない
0124デフォルトの名無しさん
垢版 |
2015/12/18(金) 17:31:03.70ID:uEIUGuN6
VSCodeは.git/とtsconfig.jsonが同じフォルダなのが前提だな…
そうでない場合も多い気がするけどな
ちょっと試用してみたけど上記の問題以外はTypeScript用エディタとして快適に使える
0125デフォルトの名無しさん
垢版 |
2015/12/18(金) 18:00:03.96ID:eorQTm9j
VSCodeに移行したいけどvimが未完成すぎてまだ移行できん
はよVSと同じクオリティに仕上げてくれ
0126デフォルトの名無しさん
垢版 |
2015/12/18(金) 19:49:07.87ID:HYHORn7l
おもいっきりスレ違いだけどVSCodeの完成度の高さにびっくり
golang開発環境としても最適。マイクロソフトの開発力の高さを目撃したぜ。
一気にATOMより使いやすくなりやがった。
typeScriptも期待していいね
0127デフォルトの名無しさん
垢版 |
2015/12/18(金) 20:01:03.80ID:uEIUGuN6
VSCodeの完成度の高さの半分はTypeScriptで作ってるからと言えなくもない
残りの半分はGoogleのChromiumとV8のお陰だが…
0128デフォルトの名無しさん
垢版 |
2015/12/19(土) 01:32:25.74ID:AUMngiLG
最近のマイクロソフトはC#と並んでNode.js推しが凄いね
次期ASP.NETのビルドシステムもNode.js系
Node.jsの普及に社運をかけているような感じがする
0129デフォルトの名無しさん
垢版 |
2015/12/19(土) 06:11:40.64ID:2wysK+Et
MSは自社のJavaScriptエンジンがあるから別にNode.jsを推してるとは思えない
単にNode.jsを使わざるを得ない状況ってだけじゃないかな
現状色んなアプリが別個にNode.jsのランタイムを含めてて無駄過ぎるから
WindowsだったらEdgeとかChakraを使うバージョンがあってもいいと思う
0130デフォルトの名無しさん
垢版 |
2015/12/19(土) 08:29:23.06ID:2BX5Ngj+
MS自身自社プロダクトのクロスプラットフォーム化を進めてるのにそんな逆行したいわけがない
0132デフォルトの名無しさん
垢版 |
2015/12/19(土) 15:19:47.28ID:2BX5Ngj+
持ち上げられすぎてると思うけどそこまで終わってもない
それよりエレクトロンがモノになるかのほうが不安
0134デフォルトの名無しさん
垢版 |
2015/12/20(日) 03:32:05.22ID:3pTsyfVL
>>131
Node.jsがオワコンとか初めて聞いたよw
JavaScriptが標準規格だから実装が何になろうがいいけど
今のところNode.js以外の使い易い実装がないのが現実
まさかとは思うけど>>131はio.jsの事を言ってたりするのか?
0135デフォルトの名無しさん
垢版 |
2015/12/20(日) 19:25:20.77ID:oiJlcETb
オワコンかどうかはわからないけど、jsフロントエンド周りは
変化が早すぎてついていける人が少ないのは確か。
ビルドツールすらなんでそんな変わっていくん?
いっそmakeでいいんじゃないか。

早くデファクトスタンダードでてくんないかな。
Meteorは完全にjs界から見放されているような気もする。(日本だけ?)
0136デフォルトの名無しさん
垢版 |
2015/12/20(日) 22:47:15.85ID:ZI2XTWWE
GUIツールや、ビルドツール、SSRあたりは残るんじゃないかな。
apiサーバやさらにバックエンドは今より減っていきそうだけど。
0137デフォルトの名無しさん
垢版 |
2015/12/21(月) 11:04:35.60ID:1HvlxK+M
Dartがもう少し頑張ってくれてりゃなぁ
0138デフォルトの名無しさん
垢版 |
2015/12/21(月) 11:44:53.03ID:+DAq0mOu
よくAltJSの括りでDartとかと一緒にされるけどTypeScriptはDartと別モンだと思う
TypeScriptは9割は(特にES6以降の)JavaScriptといっても過言じゃないけど
Dartは全然別の言語だし
Webの世界でJavaScript以外の言語が流行るとは全く思えない
0140デフォルトの名無しさん
垢版 |
2015/12/23(水) 16:53:14.82ID:YbqFKYTK
>139
それはつまり「IEもChromeもFirefoxもSafariも、既存サイトのJavaScriptを解釈しないようにしろ」ってことだろ
無理だな
0141デフォルトの名無しさん
垢版 |
2015/12/23(水) 21:21:43.04ID:Gmfz59Yf
>>139

なんかgoogleとかmozilaとかが共同でバイナリをBrowserで動かす仕組みを
開発するとかいってなかったっけNaCLじゃない奴。
それが実現したらそうなるんじゃない
0142デフォルトの名無しさん
垢版 |
2015/12/23(水) 22:12:53.38ID:VUxrNHJY
>>141
WebAssemblyだな
主目的はC++のコードを安全にかつネイティブ並に高速に動かす為のものだが
他の言語を動かす基盤にも十分成り得る

ただ現状でもJavaScriptに変換すれば似たような事にはなってるのに
他の言語が流行ってないから結局今と一緒でしょ
0143デフォルトの名無しさん
垢版 |
2015/12/23(水) 23:08:22.22ID:0c+BTX7l
JavaScriptでは難しい最適化を施した多言語から生成できる共通の中間コードの仕様策定だっけ?
デバッグが難しいだろうからほとんどCPUヘビーなとこと広告回避にだけ使われてほかはJavaScriptのままだと思うよ
0144デフォルトの名無しさん
垢版 |
2015/12/23(水) 23:29:17.65ID:37J5CESF
>>143
基本ゲーム用だ
WebGL2になるとPS3以上PS4未満の能力があるからWebAssemblyと組み合わせて
ブラウザをゲームプラットホームにしようという思惑がある
0147デフォルトの名無しさん
垢版 |
2015/12/23(水) 23:57:52.58ID:0c+BTX7l
日本一みたいな小粒の尖ったソフト出すメーカーはこういうのでコストかけずにどんどん出していったほうがいいんだろうな
0150デフォルトの名無しさん
垢版 |
2015/12/25(金) 13:17:18.21ID:zNppH846
1.7でも戻り値の型が違うとエラーになるけどnoImplicitReturnsの説明見ると
結構すり抜けるパターンがあったんだな…
全部undefined関連だけど最初からエラーにしとけよ
0151デフォルトの名無しさん
垢版 |
2015/12/25(金) 13:34:53.88ID:zNppH846
あとreadonlyはなぜ
function hoge(readonly a: number) { }
と書けないんだよ…
メンバーより引き数に指定出来る事の方がはるかに重要だ

他は劇的に便利になるようなものはないな
0153デフォルトの名無しさん
垢版 |
2015/12/25(金) 15:03:46.23ID:9XEpf0Yk
>>151
numberにreadonlyを指定することは意味がないと思うが…

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

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

単純なフィールドの読み書きだけならいいけど
getXXX() は readonly だよねとか
getXXX() の中でキャッシュ値が変化するけど実質的には readonly だよねとか
やりだすと、C++の悪夢がよみがえってしまう
0156デフォルトの名無しさん
垢版 |
2015/12/25(金) 18:43:03.80ID:zNppH846
>>155
そりゃ悪夢だろ
なんでクラス定義する側がそんな苦労しないといけないんだ
ちなみに
class Hoge {
int getXXX() const;
mutable Cache cache;って知ってるか?
こうしておけば何か気にする事なんてあるか?
0157デフォルトの名無しさん
垢版 |
2015/12/25(金) 18:47:18.76ID:zNppH846
補足
class Hoge {
int getXXX() const; ← これはcacheの中身は書き換える
mutable Cache cache; ← これが書き換わってもconst性に影響無いと考える
0161デフォルトの名無しさん
垢版 |
2015/12/26(土) 00:39:17.52ID:iwceh6a5
C++で仕事を15年以上して凄い奴とかどうしようもない奴とか色々見てきたけど
constに問題があるとか初めて聞いたよ
0162デフォルトの名無しさん
垢版 |
2015/12/29(火) 02:41:33.95ID:cehhvXHA
VSCodeがいつの間にアップデートしてて>>124の問題が早速修正されてるな
オプソにした事でユーザーが増えて沢山突っこまれたに違いない
もはやTypeScript最強エディタと言わざるを得ない
0163デフォルトの名無しさん
垢版 |
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のソースがそうしてる)
0164デフォルトの名無しさん
垢版 |
2015/12/29(火) 16:10:58.92ID:O/+FVQhq
そりゃそうだ
0165デフォルトの名無しさん
垢版 |
2016/01/03(日) 18:07:55.32ID:CSCP9BIo
だれかわかるやつ教えてくれ...

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

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


/// <reference path=
0168デフォルトの名無しさん
垢版 |
2016/01/04(月) 00:03:32.03ID:tFJ0VkMO
>>167

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

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

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

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

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

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

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

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

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

...できてねーよな?
0180デフォルトの名無しさん
垢版 |
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でコンパイルした時に困る事になる (継承をカスタマイズ出来ないし)

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

ユースケースがないってのはちょっとひっかかるけどな。
キーワードstaticってクラスに属してるだけでstatic getが副作用を起こさない、他の影響をうけないって保証されてるわけじゃないし。
そう書けってことではあるんだけどね。
0183デフォルトの名無しさん
垢版 |
2016/01/18(月) 13:03:11.26ID:ELUPuNqk
MSYS上のvimからtsuquyomi使えんかった
多分Nodeがマウントされたパスとか/c/から始まるパスを理解できないんだろうな
MSYS版Nodeがあればなぁ
0184デフォルトの名無しさん
垢版 |
2016/01/18(月) 17:46:53.97ID:ELUPuNqk
よく見たらmingw側にNodeがあったので試してみたけどバージョンが古いせいか駄目だったぜ
TypeScript書くときは大人しくGVimにしておくか
0185デフォルトの名無しさん
垢版 |
2016/01/22(金) 13:05:16.12ID:yW17RJ8f
ChakraCoreを使ったNode.jsが動いたらしい
しかし最近のMSはプロジェクト名にCoreを付けまくってるな
0186デフォルトの名無しさん
垢版 |
2016/01/23(土) 10:08:20.25ID:ym0h+5An
--module commonjsの状態でmoduleとnamespaceを使わずに
export function ...
export var ...
って書いたソースがcommonjsのモジュールとしてコンパイルできるのに
外部からimportしようとするとモジュールが見つからないって怒られて困った
--module amdだと大丈夫みたいなんだけど、バグだったりするの?
0188デフォルトの名無しさん
垢版 |
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
0190デフォルトの名無しさん
垢版 |
2016/01/25(月) 13:40:35.40ID:ipEE3CyC
TypeScriptのモジュールの扱いが激烈に難解になったからみんなハマルだろうな
俺は大体理解できたけど
0193デフォルトの名無しさん
垢版 |
2016/01/25(月) 14:05:44.07ID:ipEE3CyC
>>191
あと、 --moduleResolution node で認識される*.d.tsの書き方も言ってみてよ
これドキュメントに書いてないんだよな
0194デフォルトの名無しさん
垢版 |
2016/01/25(月) 14:22:21.52ID:ipEE3CyC
http://qiita.com/vvakame/items/72d22e33632178f7db24
この人の↑これを見るのが一番まとまってて分かり易い
> ・declare module "hoge" 形式の定義は利用できない
って書いてあるけど実際はもう少し修正しないと駄目だった
とりあえず適当に修正すれば通るように出来るけど何が問題なのか
ドキュメントが見つからず確証が持ててない
0195デフォルトの名無しさん
垢版 |
2016/01/25(月) 17:21:06.80ID:FKcC8XYP
みんなはcommonjs使うからハマらないっての
クイズじゃなくて何がしたくてできないのかのほうを書けよ
0196デフォルトの名無しさん
垢版 |
2016/01/25(月) 19:30:10.53ID:ipEE3CyC
>>195
>>194の話はcommonjsとか関係無いよ、モジュール全般の話でしょ
それにブラウザからcommonjsロードできないのにみんな使うってのはおかしいでしょ
0198デフォルトの名無しさん
垢版 |
2016/01/26(火) 10:19:05.81ID:kKfPXzbs
JavaScriptから来た人には歴史的経緯と後付モジュール機構は常識の部類なんだろうけど、他言語からくるとjs/tsのモジュール関係は病んでるよな
0199デフォルトの名無しさん
垢版 |
2016/01/26(火) 14:10:10.49ID:pw0cS8Zr
>>197
最後にはそれかよw
ちゃんと具体的に書いてくれないと完全に負け惜しみにしか聞こえないよ
0200デフォルトの名無しさん
垢版 |
2016/01/26(火) 14:24:44.17ID:pw0cS8Zr
>>198
TypeScriptには内部モジュール(内部は造語)があって外部モジュールについては
あまり重要視されてなかった経緯があるからね
module→namespaceって名前を変えたけどmoduleキーワードは今も使える
もはや混乱の元でしかないし<<<reference file="hoge"/>ももはや役割を終えてるからなくした方がいいな
で、importの意味が1.6でしれっとそれより前の解釈と思いっきり変わってしまったのが混乱の元だ
とりあえずVSCodeのソースを見れば最近の*.tsの書き方が分かる
俺はそれ見て同じ書き方をしようとしてmodule,referenceから移行しようとして
importがトンでもない事になってる事にやっと気付いた
■ このスレッドは過去ログ倉庫に格納されています

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