16/09/02 15:48:27.54 LgVEFfHs.net
内部モジュールについて教えてください。
これを使う場合ってconcatで1ファイル化する場合ってことでいいんでしょうか
webpackをつかって1ファイル化する予定なんですがその場合は外部モジュールを使う認識であっていますか?
453:デフォルトの名無しさん
16/09/02 17:23:11.44 dDo1g1S1.net
外部モジュールになるファイルは独立してるはず
今はnamespace推奨で内部モジュールって表現はあまり意味を成してない?
ので1ファイルにまとめたら名前空間で仕切られてるだけって考えでいいんじゃないか
454:デフォルトの名無しさん
16/09/03 00:54:26.94 FrYijLTu.net
昔からある単なるmoduleはもうobsoleteですぐにnamespaceにリネームすべきだね
いわゆるモジュールはJavaScriptの世界を知らないと理解しがたいものになってるね
455:デフォルトの名無しさん
16/09/03 00:56:21.93 FrYijLTu.net
ES6のmuduleが普及すればかなりシンプルになるんだろうけど、まだブラウザがサポートしてない
456:デフォルトの名無しさん
16/09/09 21:36:47.25 oMlYA35z.net
letは再入不可にして欲しいなあ
457:デフォルトの名無しさん
16/09/09 21:41:01.71 0o6Zl0oX.net
constじゃあかんの?
458:デフォルトの名無しさん
16/09/10 07:30:02.50 XD8JXdoT.net
なんか名前が先祖帰りっぽくてなあ
459:デフォルトの名無しさん
16/09/11 01:15:44.93 PWIs+lC0.net
>>436は「再入」不可と言ってんだが…
460:デフォルトの名無しさん
16/09/11 01:38:43.42 m+TGnnw0.net
リエントラントを意識したことが無かったりすると
再入って言葉を再代入の変わりに使ってもいいじゃん?とか思ってしまうのだろう
461:デフォルトの名無しさん
16/09/11 08:21:20.09 o8qO+nVm.net
「リエントラントな変数」はナンセンス�
462:セから、ま、多少はね?
463:デフォルトの名無しさん
16/09/14 09:26:01.83 tSXXNMuv.net
tsってjsに変換して型情報捨てちゃってるけどバイナリにコンパイルとかサポートしないのかな
WebAssemblyにそのまま使えたら面白いことになりそう
464:デフォルトの名無しさん
16/09/14 09:52:25.62 EEwsGEAZ.net
asm.jsは文法だけjsのサブセットで実行モデルは全然違うんでサポートしないっつうかできなかったはずだが、WebAssemblyも同じじゃないの?
465:デフォルトの名無しさん
16/09/14 10:28:43.01 8JRyg+5x.net
折角の型情報を活かせるのが構文チェックだけで
高速化には寄与しないってのは勿体ないのは確かだな
466:デフォルトの名無しさん
16/09/14 13:51:30.89 Adg+xGfe.net
TypeScriptのビジョン的には、そういうのはESが新バージョンで型アノテーションを導入して
ブラウザによって最適化されるべきということなんじゃない?
ハックで実装するのはTypeScript的じゃないよ
467:デフォルトの名無しさん
16/09/14 14:43:49.29 UUl7aTux.net
ES5と同じようにwasm用のサブセット作って段階的にサポートしていけば余裕しょ
468:デフォルトの名無しさん
16/09/14 14:58:26.52 Adg+xGfe.net
アセンブリレベルまでコンパイルしようと思えば現在JSに丸投げしてる部分をTSで独自に定義し直す必要があるから、
仕様はサブセットどころか無茶苦茶肥大化するよ
469:デフォルトの名無しさん
16/09/14 15:06:48.85 eWqPmXTS.net
どうせJavaやC#がWebAssemblyの出力に対応するだろうし、高速化を期待するならそっちを使うべきだな
470:デフォルトの名無しさん
16/09/14 15:12:59.56 eWqPmXTS.net
ただ、Webの世界はAPIが全てJavaScript用に定義されてる訳だから
DOMをいじるとかWeb関連のコードを書こうとしたらJavaScript使うのが一番楽だろう
で、TypeScriptを使えばエラーの少ないコードが書けるよってだけの存在だな
471:デフォルトの名無しさん
16/09/21 09:53:22.62 ye3OhaXn.net
netbeansでtsファイルをコンパイルできますか?
472:デフォルトの名無しさん
16/09/23 07:28:38.08 wUPl9fHa.net
TypeScript 2.0 正式リリース
URLリンク(blogs.msdn.microsoft.com)
473:デフォルトの名無しさん
16/09/25 21:22:23.16 rgw8PMte.net
Visual Studio2015のTypeScript2.0で
if(1===2){
...
}
とすると、
エラー TS2365 演算子 '===' を型 '1' および '2' に適用することはできません。
になるのですが、1と2を比較すると何が悪いのでしょうか?
474:デフォルトの名無しさん
16/09/25 22:06:10.66 s0l/HB/m.net
>>452
Tagged Union 由来のエラーのような気がする
ナンセンスなコードだけど、気になるようならエラーレポートしておいで
片方が変数なら問題ないから、普通にコードを書くうちは表面化しない
475:デフォルトの名無しさん
16/09/26 03:17:54.07 Pt8k1v+W.net
>>451
Revised 型の国のTypeScript
URLリンク(typescript.ninja)
>>430
TypeScript 2.0.3 変更点
URLリンク(qiita.com)
476:デフォルトの名無しさん
16/09/26 12:48:28.20 KtFZyGzz.net
型の国新人研修マニュアルみたいで微妙だった
477:デフォルトの名無しさん
16/09/26 14:39:12.43 ymOrEJcI.net
一瞬変な絵が出てブラクラかと思った
URLリンク(techbooster.github.io)
478:デフォルトの名無しさん
16/09/26 23:44:06.70 9aeHOXYg.net
>>452
これは興味深い挙動だな
確かにnumberよりも1や2という「型」の方がより特殊化されてるからそっちで比較されちゃったんだろうな
let n: 1 = 1;
if (n === 2) { // 同じエラー
if (n === <number>2) { // OK (もちろんfalseになる)
number型定数のデフォがnumber型だと最初がエラーにならなくなるから難しい問題だな
定数同士の比較の時は型を昇格させるみたいな処理�
479:ヌ加する事になるのかな
480:デフォルトの名無しさん
16/09/27 00:14:39.14 pG4L5ums.net
literal types増えたのリリースノートに書いてあるだろ
アナウンスのドキュメントさえ読まないバカが賢ぶってもまるわかりなんだよ
481:デフォルトの名無しさん
16/09/27 00:21:02.93 DHOAQjGg.net
変なのが来た
482:デフォルトの名無しさん
16/09/27 13:49:47.90 cO8I5ivP.net
Delphiか、、Prismはお試しで終わったっけな
483:デフォルトの名無しさん
16/09/27 16:37:55.22 LSfhFpLX.net
espower-typescriptのtypescript2対応版ってないですか?
484:デフォルトの名無しさん
16/09/27 18:40:40.20 LSfhFpLX.net
espower-typescriptは自動でproject rootのtsconfig.jsonを参照しているんですが
別ファイルで指定する方法ないでしょうか?
485:デフォルトの名無しさん
16/09/27 22:52:10.27 K3k5rGhG.net
>>458
とりあえず>>452のエラーの理由を詳細に説明してくれ
486:デフォルトの名無しさん
16/09/30 12:56:49.51 Y6l190wq.net
typescriptでは、
こういう書き方をするようですが、
$(document).ready(() => { ... });
普通の書き方
$(document).ready(function () { ... });
だとダメなのでしょうか?
487:デフォルトの名無しさん
16/09/30 13:07:29.24 LMNz6D7V.net
>>464
全く問題ないよ。関数内のthisの指し先の違いにだけ注意がいる
488:デフォルトの名無しさん
16/09/30 17:16:18.31 ff48EwFg.net
>>464
typeScriptというよりes2015ですね。
489:デフォルトの名無しさん
16/10/05 16:03:45.86 ndferu82.net
jQueryの場合はコールバック内で$(this)とかするけど() => {にするとおかしな事になる(最新だとどうなるかは分からん)
だからjQueryに渡す場合は全部functionにしてる。一貫性がなくなって気持ち悪いけど
490:デフォルトの名無しさん
16/10/06 09:02:48.12 RX03s8Mg.net
どちらも関数ではあるけど用途に違いがある以上、元より一貫性を出すことなんてできないでしょ
491:デフォルトの名無しさん
16/10/06 15:59:28.90 xaiWfMZS.net
() => {}.bind(this)
492:デフォルトの名無しさん
16/10/06 20:20:49.67 57+jsWi1.net
>>468
用途に違いがあるっていうのかな?
functionの挙動に依存しちゃってるから仕方なく使ってるってだけだし、いずれ使う必要は無くなる
493:デフォルトの名無しさん
16/10/07 14:51:03.71 CXORFQa6.net
null合体演算子はありますか?
494:デフォルトの名無しさん
16/10/08 21:45:49.55 2uwi8nYQ.net
>>471
|| のことかな? falseだとダメだけど
495:デフォルトの名無しさん
16/10/20 18:22:59.19 UBHF5fAS.net
typescriptでnode_modules配下のjsコードのimportは可能ですが
自作のjsコードをimportして使いたいのですが可能でしょうか?
具体的に言うとpegjsで作ったparserをtypescriptから使いたいんです。
496:デフォルトの名無しさん
16/10/21 09:58:59.53 xTFSBjWO.net
>>473
URLリンク(qiita.com)
497:デフォルトの名無しさん
16/10/21 10:02:09.42 PxEW311p.net
公開部分だけなら自分で定義ファイル書くのは容易なんじゃないか
もしくはソースをTypeScriptに変換しちゃって-d付きでコンパイル
498:デフォルトの名無しさん
16/10/21 12:40:55.64 xTFSBjWO.net
ちょっと考えればtsだってjsに変換してからimportしてるわけだからエラーが出てるようにみえるのは
定義がないだけってわかるだろうに。アホですな。
499:デフォルトの名無しさん
16/10/24 23:34:32.07 oa9Cbf2z.net
typescript2.0から.d.tsのデフォルトの検索パスってどうなってるんですかね?
とりあえず自分で定義したのはnode_modules/@types/ に置くことで認識はするんですけど
気持ち悪いのでできればnode_modulesに置きたくないんですよね
500:デフォルトの名無しさん
16/10/25 00:14:10.49 jY50IjHL.net
その手の質問はQ&Aサービス使え
501:デフォルトの名無しさん
16/10/25 09:54:10.21 wi8xj/Ad.net
>>477
--typeRoots
次からURLリンク(github.com)を必�
502:ヌとしてテンプレに入れようぜ
503:デフォルトの名無しさん
16/10/25 15:38:46.44 DJibeu24.net
そう言わずに教えてあげればいいじゃない。どうせ話題もないんだし
504:デフォルトの名無しさん
16/10/25 16:45:27.88 k0D4gpoS.net
.net frameworkを使えたりframeworkからコンパイルできれば面白くなりそうなのに
505:デフォルトの名無しさん
16/10/25 18:39:55.45 UTXk7OSn.net
たしかに .Net Framework使えたら便利だな
現状ではNode.jsから外部コマンドを叩いて
C#やPowerShellを経由すればできるんじゃね
506:デフォルトの名無しさん
16/10/25 20:33:02.00 DJibeu24.net
やっぱりTypeScript使いの人はMicrosoftマンセーの人が多いの?
Mac使いとしては.Netが使えたからどうなんって感じなんだが。
ElectronとかでTypeScriptを使う話をしてるの?
507:デフォルトの名無しさん
16/10/25 21:30:56.89 VLkXttsf.net
Windows向けtypescript処理系自体jscriptにコンパイルされて.NETオブジェクト経由でファイルアクセスしてなかったか
508:デフォルトの名無しさん
16/10/26 02:40:39.39 m/Az1cPZ.net
>>483
>TypeScript使いの人はMicrosoftマンセーの人が多いの?
特定の企業が好きというよりかは
デファクトスタンダードに乗りたいだけ
WinとMacならWinが(価格性能比的に)使いやすいし
AndroidとiPhoneならAndroidが使いやすいから
(規制が少ないのでとくに開発側としては)
509:デフォルトの名無しさん
16/10/26 03:51:14.56 CrOhdQQd.net
typescript使うよりc#で書くほうが楽だよね
510:デフォルトの名無しさん
16/10/26 07:48:56.60 JLzF9ZGl.net
>>481
JsProjectWinRTNamespace: URLリンク(msdn.microsoft.com)
WinRT (UWP) ならJavaScript側へ公開できるから、それを使うことは可能。
なんにせよ、JavaScriptホスト側を握っていれば (ChakraCore等) 好きにできる。Macでも。
511:デフォルトの名無しさん
16/10/26 10:52:47.34 jSNrAQ3l.net
>>484
.netじゃなくてWSHを使ってると思う
tsc.jsの2630行目辺りを読んでみれ
512:デフォルトの名無しさん
16/10/26 14:57:17.75 L9VZpe/b.net
tsc.js
URLリンク(github.com)
513:デフォルトの名無しさん
16/10/27 00:16:48.17 e6l93V+P.net
>>485
surfaceて高いイメージあるが。
最近はmacも安いし、unix系だからweb系ならmacの方が人気ないか?
そしてtypeScript使うやつはweb系だよね。
514:デフォルトの名無しさん
16/10/27 00:28:41.45 rC8yedLe.net
Web系といってもBtoBの比較的かっちりしたものをやってるところはC#やJava使ってWindows上で開発してるところも多いよ
そしてTypeScriptもWeb系の中では比較的そっちの方で好まれてるイメージ
515:デフォルトの名無しさん
16/10/27 07:44:18.44 aKCl6pYl.net
Web系じゃないけどソフトのプログラムでJavaScriptが採用されてるから使ってるよ
516:デフォルトの名無しさん
16/10/31 11:16:34.62 zObjWshz.net
データと操作を分離する運用
URLリンク(goo.gl)
上記スタックオーバーフローを見てたんですが
データ構造を扱うときにclassを使わずにすべてjsonにしてしまうって運用は結構を有る話でしょうか?
個人的にはElixirも触っていてデータ構造と処理関数を分けると言うのはアリだとは思うんですが
手元のコードはclass使いまくりでシリアライズが必要になったタイミングで軽く後悔しているところです(^ρ^)
517:デフォルトの名無しさん
16/10/31 12:47:50.83 UgzYDGEX.net
そんなに難しい話じゃないような
class Pen {
constructor(private json: PenData) {}
}
でいいじゃん
518:デフォルトの名無しさん
16/10/31 12:58:02.65 zObjWshz.net
>>494
それでデシリアライズしたものをシリアライズした時
519:にどうやってPenDataだと特定するの?
520:デフォルトの名無しさん
16/10/31 13:30:00.95 lUtaNTCT.net
>>495
シリアライズした構造が固定なら、ルートから順に再構築するのでは?
自分で全てのコンストラクタなりdeserializeメソッドを実装することになる
汎用デシリアライズ関数1個で全てを賄うつもりなら、JSON内にクラス名を保持して
クラス名とJSONからオブジェクトを構築するファクトリを用意するのかな
TypeScriptは実行時型情報が無いから、意外と素直で原始的な方式になると思う
521:デフォルトの名無しさん
16/10/31 16:02:19.09 zObjWshz.net
>>496
ですよね。結局こういうめんどくさい実装になるので、だったら
最初からロジック的にデータ構造はすべてjsonにしてしまったほうが楽かなと。
522:デフォルトの名無しさん
16/10/31 17:59:38.01 lUtaNTCT.net
>>497
ロジック的にJSON (=循環の無い木構造) にできるなら、それが楽だとは思う
実行時には循環参照が必要になる場合は、保存時にフラットなJSONに変換せざるを得ない
これを汎用化していくと、いわゆるO/Rマッパーになるんだろうな
523:デフォルトの名無しさん
16/10/31 20:32:53.85 963XFQ2I.net
ここまでなんのためにシリアライズするか確認するやつなし
524:デフォルトの名無しさん
16/10/31 21:41:15.52 UgzYDGEX.net
>>495
そんなもんまともなスキーマ設計してたら一意に決まるだろ
JSは伝統的にAPI指向で、入出力のスキーマだけはきっちり守って
あとは適当に辻褄合わせすればいいという考え方をするもんなんだよ
エンティティを重視しないの
525:デフォルトの名無しさん
16/10/31 21:42:12.65 zObjWshz.net
chrome extension作ってまして
background - popup -contentscript間のデータのやり取りがjson経由でしかできなかったので。
526:デフォルトの名無しさん
16/11/01 01:26:11.04 R4cGftBs.net
永続化や通信でシリアライズが必要ならまず構成と通信内容を決めて
実装可能であることを確認してから個々の実装に入るべきだった
行きあたりばったりで通信が必要なデータやコマンドが噴出してるだろうから
個別機能に逃げずに先にそこを設計しろ
527:デフォルトの名無しさん
16/11/01 03:17:05.88 ZbjdSYd3.net
>>501
普通にobjectを渡せるんじゃないか?
528:デフォルトの名無しさん
16/11/09 22:55:56.80 w82iFkDp.net
React Componentを相対パスでimportするのはもう嫌なので、絶対パスでimportしてやる
URLリンク(qiita.com)
コレいいなって思ったんですがTypeScriptで絶対パス指定する方法って標準であったりしないですかね?
529:デフォルトの名無しさん
16/11/10 00:57:52.66 +mabk82N.net
TypeScript 2.1 RC: Better Inference, Async Functions, and More
URLリンク(blogs.msdn.microsoft.com)
530:デフォルトの名無しさん
16/11/10 03:11:40.39 XJYCbDSV.net
モジュール周りはここに書いてあるようだ。
URLリンク(www.typescriptlang.org)
531:デフォルトの名無しさん
16/11/12 00:03:42.69 0EI9e+TE.net
>>505
TypeScript 2.1.1 変更点
URLリンク(qiita.com)
532:デフォルトの名無しさん
16/11/16 13:26:15.81 VglaLP8t.net
bucklescript ω
533:デフォルトの名無しさん
16/11/20 01:23:41.33 PZEuAd0p.net
みんなエディタは何使ってるの? VisualStudio以外にいいエディタある?
534:デフォルトの名無しさん
16/11/20 08:29:21.81 p95gh/Vn.net
vscode
535:デフォルトの名無しさん
16/11/20 09:20:47.29 mNZMIvsS.net
vim
536:デフォルトの名無しさん
16/11/20 09:40:13.46 0ByPx+DX.net
Emacs
URLリンク(www.typescriptlang.org)
の下の方にEmacsのTypeScript開発環境へのリンク
537:がある。メソッド補完とかリファクタリングとか全部出来る
538:デフォルトの名無しさん
16/11/20 16:06:26.39 rN9nZaoB.net
>>509
ALM
URLリンク(alm.tools)
好きが高じてエディタまで作ってしまった例
539:デフォルトの名無しさん
16/11/20 17:44:23.07 Y8tBh63Q.net
>>513
+1
540:デフォルトの名無しさん
16/11/24 16:16:50.02 Kbd9UGgc.net
ALM 使ってみたけど、JIS キーボードで CTRL+¥ が効かなくてツリービューが出ない…
ファイル操作はツリービューでやるんだよね?
541:デフォルトの名無しさん
16/11/25 11:07:12.84 lg4MxwBZ.net
>>513
本家のプレイグラウンドも楽しいけど、ちょっと他のライブラリとか合わせられるようなのもほしい。 こういうのと組み合わせて作ってくんないかなー。
542:デフォルトの名無しさん
16/12/01 23:31:35.77 V3pVktwk.net
TypeScript Advent Calendar 2016
URLリンク(qiita.com)
(今年も)やっちまった感
543:デフォルトの名無しさん
16/12/02 15:42:21.41 ocojT6FV.net
需要なしか
544:デフォルトの名無しさん
16/12/02 21:48:15.76 i9Hqboy9.net
12月突入数時間前まで誰も立てなかったしそりゃね
545:デフォルトの名無しさん
16/12/03 16:07:27.97 iU+ignEA.net
いつも納期を守らないひとですねわかります
546:デフォルトの名無しさん
16/12/03 22:27:39.83 W5YxFMDl.net
TypeScript 2.1のkeyofとかMapped typesがアツい
URLリンク(qiita.com)
そろそろ2.1正式版来る気配
547:デフォルトの名無しさん
16/12/05 08:39:36.02 vZnFdVec.net
人気ないでしょ。
548:デフォルトの名無しさん
16/12/05 09:21:11.08 nuFcVUYF.net
英語圏はどうなのよ
549:デフォルトの名無しさん
16/12/05 16:49:11.01 5hp1IXjD.net
>>521
パスやファイル名に日本語が有ると
エラーする問題はこれで直るのか?
550:デフォルトの名無しさん
16/12/05 17:57:33.20 dF177W8B.net
>>519
Tcl/Tkの誰か立ててよ
551:デフォルトの名無しさん
16/12/08 07:43:57.58 sRPpwh3/.net
URLリンク(blogs.msdn.microsoft.com)
「...」系の構文が増えるといいなぁ
最近のC++に追加された構文が便利だから
552:デフォルトの名無しさん
16/12/08 14:41:29.32 K4A6J/m6.net
しかしkeyofとかTypeScriptスゲーな
型言語としてやれる事はとことんやろうという方針なんだな
keyofは既存のJavaScriptコードと連携する時にコーディングミスをコンパイル時に分かるようになるって事かな
TypeScriptオンリーの時は多分使いそうにないけど、何か使いどころがあるんだろうか?
553:デフォルトの名無しさん
16/12/08 14:49:41.32 K4A6J/m6.net
と思ったらMapped Typesでkeyofが必要だったんだな。納得した。
Mapped Typesは使いどころを模索中…
554:デフォルトの名無しさん
16/12/08 23:29:45.09 /aGxLpEu.net
ちょっと手段が目的化してる感が否めないなあ
最初からTypeScript前提で作ったモジュールを使う分にはkeyofが必要な状況はそう無いだろうし、
既存のJSライブラリのインターフェース書くための機能だと割り切るんだったら
そこまで厳格にDRYに拘る必要もないように思うが
555:デフォルトの名無しさん
16/12/09 08:58:45.48 zMqsgGKG.net
・interface を readonly の有無で2回書かなくて良い
・エレメントに設定する一連の属性をオブジェクトで渡す際の型安全
ぱっと思いつくだけでも悪くない機能だと思うけど
556:デフォルトの名無しさん
16/12/10 08:55:22.73 ZQIWZdV9.net
classのコンストラクタを定義する場合、もしメンバ変数が20個あるとすると、
コンストラクタにも20個の引数を並べて、
constructor(arg1, arg2, ......, arg20){
this.parm1 = arg1;
this.parm2 = arg2;
this.parm3 = arg3;
..
}
のようにする必要がありますか?
もう少し簡素に書けませんか?
557:デフォルトの名無しさん
16/12/10 10:13:56.45 yQhPHczS.net
constructor(public parm1, private parm2) {
558:デフォルトの名無しさん
16/12/10 13:08:54.64 ZQIWZdV9.net
>>532
そんな技が有ったのですか!
ありがとうございました。
559:デフォルトの名無しさん
16/12/16 22:23:17.99 Za7bRyyh.net
型システムがチューリング完全になっててもおかしくないな
たしか scala と c++ は達成してた筈
560:デフォルトの名無しさん
16/12/16 22:39:54.50 lf6NCS1E.net
C++はtemplateでしょ
template引数の扱いがほぼ帰納関数の定義みたいなもんだしな
561:デフォルトの名無しさん
16/12/16 22:40:27.11 oD0nT6zl.net
TypeScriptの型はあくまで検査専用でメタプログラミングには使えないから無理じゃない?
562:デフォルトの名無しさん
16/12/16 23:19:39.50 hVjcwv5q.net
C++のテンプレートがチューリング完全だとしても文字列のハッシュ値は計算出来ない
なぜならC++の文字列はポインタでしかないけどコンパイル前に参照する事が出来ないから
それでもチューリング完全なのは間違いないけど、別にチューリング完全だからってなんでも出来るわけじゃないってことだな
563:デフォルトの名無しさん
16/12/16 23:21:43.20 hVjcwv5q.net
ちなみに文字列じゃなくて文字の配列にすれば問題ない
const char* str = "hoge";じゃなくて
const char str[] = { 'h', 'o', 'g', 'e' };ってこと
564:デフォルトの名無しさん
16/12/16 23:24:42.09 hVjcwv5q.net
間違えた…
const char str[] = { 'h', 'o', 'g', 'e', '\0' };
だった
連投ごめんなさい
565:デフォルトの名無しさん
16/12/16 23:29:20.71 lf6NCS1E.net
ゲーデル「そこはゲーデル数で…」
566:デフォルトの名無しさん
16/12/16 23:34:58.93 ZvALx4tK.net
ゲーデルはホント天才だよな
紙と手廻し計算機しかない時代に
「符号化すれば数式だろうが証明図だろうが数で表せるし
数の計算が数式処理や証明じゃん」なんて
567:デフォルトの名無しさん
16/12/17 17:02:33.38 a9hyyPvt.net
むしろその世代だったからよかったのかも
568:デフォルトの名無しさん
16/12/18 15:38:22.61 6QPg4rBj.net
TypeScript 2.0.8でちょっとお尋ね
~~~~file1.ts
namespace TestNS { export interface TestInterface {} }
~~~~
~~~~file2.ts
/// <reference path="file1.ts" />
import * as Lib from "~"; ← こいつがいると下のTestInterfaceでTS:2304 Cannot find nameが出る(コメントアウトすれば出ない)
namespace TestNS {
export class Test implements TestInterface {}
}
~~~~
上に書いた通りimport文がいるとTestInterfaceでTS:2304 Cannot find name 'TestInterface'になるんだけれども, これってどう理解したらよい?
import文の有無で見つからなくなるのはとても不思議な感があるんだけど
569:デフォルトの名無しさん
16/12/18 15:52:58.94 gkl2dVgP.net
内部モジュール形式と外部があって内部だとネームスペースはすべて同じものとしてマージされるから参照できる
内部ゴミだから外部覚えろ
570:デフォルトの名無しさん
16/12/19 20:40:04.16 tHwvluTB.net
reference pathは使わないことを勧める
型定義ファイルの参照はreference typesや--types
連結するなら目的別にプロジェクトを分けて--outFile
571:543
16/12/19 23:08:19.83 WEeYyWf0.net
結局外部モジュール化して解決しました
細かいことは組んでからコンパイル済みソース見て考えることにします
572:デフォルトの名無しさん
17/01/19 09:39:46.00 uhfgjGGl.net
URLリンク(chrome.google.com)
573:デフォルトの名無しさん
17/02/03 10:13:11.49 ppyFFvug.net
TypeScript 2.2
URLリンク(blogs.msdn.microsoft.com)
・object type - "non-primitive"を表す型
・mixins and composable classes - 無名クラスを返す関数のサポート
574:デフォルトの名無しさん
17/02/03 11:53:48.71 OZdxyk8U.net
>>548
rcかあ
入れるのはやめとくわ
575:デフォルトの名無しさん
17/02/13 21:38:00.71 g48+zfGw.net
typescript版のjsFiddleみたいなのないですかね?
576:デフォルトの名無しさん
17/02/13 21:52:46.81 XAOuYKtl.net
>>550
URLリンク(jsfiddle.net)
typescript選べるんだけど、何がお望み?
577:デフォルトの名無しさん
17/02/14 08:03:16.30 06xiI2rQ.net
>>551
補完が効かないとtypescriptの意味ないよね。
578:デフォルトの名無しさん
17/02/14 22:01:13.41 PJNUS5QV.net
なぜ TypeScript の型システムが健全性を諦めているか
URLリンク(qiita.com)
579:デフォルトの名無しさん
17/02/15 11:35:44.90 Uv6dN9fe.net
typescriptでvue.js使ってる人っています?
どんな感じか聞いてもいいですか?
vueファイルのscriptにtypescriptを使った場合にVisualStudioCodeから補完聞かせる方法ってあるんですかね?
580:デフォルトの名無しさん
17/02/15 13:37:43.12 0zPxl8zN.net
いいよ
あるよ
581:デフォルトの名無しさん
17/02/16 14:34:53.75 I/Biy33K.net
typescript ってclassの中でclassは定義できないの?
582:デフォルトの名無しさん
17/02/16 16:54:40.22 H/kSQGez.net
>>556
innerClass = class { ... } の構文を使ってみては?
583:デフォルトの名無しさん
17/02/16 18:23:19.49 I/Biy33K.net
>>557
さんきゅう。
その後、自分でも調べてそういう構文を見付けたのだが、
なぜ一般的な言語のようにclassをネスト出来ないのかな?
584:デフォルトの名無しさん
17/02/17 10:02:26.32 XBlUtmng.net
構造的にESにないものは採用されないんじゃなかろうか
俺もprivate static Inner = class {...で試したけどあまり使えなさそうだからやめた
585:デフォルトの名無しさん
17/02/23 21:12:34.52 sjM/LKuB.net
Announcing TypeScript 2.2
URLリンク(blogs.msdn.microsoft.com)
TypeScript 2.2.1 変更点
URLリンク(qiita.com)
586:デフォルトの名無しさん
17/02/26 21:26:09.95 6xiviMi3d
Angular2に関する質問で、専用スレッドみたいなものが見つからなかったのここで質問させてください。
Angluar2でWebSocketをしようしたファイルをつくっているのですが、
ngOnInit内のws.onmessageの中で
Component直下のグローバル変数に値をいれた後
他のComponent直下の関数内で
値が書き換えられていない(初期値があれば初期値、なければundefined)ということが起きています。
onmessage内ではonmessage内でしか書き換えた値が使えないなんていうことがあるのでしょうか。
必要であればコードはります。
Angular初心者でTypeScriptに関しても理解が浅いため
だれかお力添えお願いします。
587:デフォルトの名無しさん
17/03/19 00:28:00.75 zrbJr/YL.net
Chrome拡張機能を作ってる方結構いるみたいなので教えてほしいのですが
「chrome.~~~」のAPIが「Supplied parameters do not match any signature of call target.」とコンパイルエラーになります
「/// <reference path="./node_modules/@types/chrome/index.d.ts" />」でd.tsは指定しているのですが、他にも何か記述が必要ですか?
588:デフォルトの名無しさん
17/03/19 02:18:51.51 9qStAS/N.net
>>562
そもそも今は/// <reference path=みたいな書き方はしない。
@types/XX npm install すれば使えるはず。
589:デフォルトの名無しさん
17/03/19 02:40:46.59 /2pY/ZTT.net
インストしても明示的なインポートなしには使えんよ
590:デフォルトの名無しさん
17/03/19 03:16:06.29 TMN19OY5.net
>>562
エラーしてる部分のソース貼るといいよ
591:561
17/03/19 11:24:02.73 zrbJr/YL.net
皆様ありがとうございます…解決しました…chrome.~~に引数が設定されてなくてエラーになるという超凡ミスでした…
エラーメッセージの意味をきちんと理解しないといけないですね…
--- コンパイルエラー ----------------------------------------------------------
if (window.location.href.indexOf('aaa.com') !== -1) {
chrome.pageAction.onClicked.addListener();
}
------------------------------------------------------------------------------
--- コンパイル正常 -----------------------------------------------------------
if (window.location.href.indexOf('aaa.com') !== -1) {
chrome.pageAction.onClicked.addListener(() => {
});
}
------------------------------------------------------------------------------
あと、仰る通り<reference path= />なくてもコンパイル通りました
皆様お騒がせしました
592:デフォルトの名無しさん
17/03/19 13:25:11.81 9qStAS/N.net
>>566
エディター何使ってんの?
typescriptなら書いてるそばから検出できるエラーじゃないのか?
593:デフォルトの名無しさん
17/03/28 10:03:39.39 r9lg9pov.net
ターゲットにWebAssemblyを追加する計画とか無いのかな
594:デフォルトの名無しさん
17/03/28 14:44:15.57 3EkUFmFA.net
interfaceの定義でArrayの要素が2つしかない場合の定義の仕方ってあるかな
interface Pair {
number[2]
}
interface Data {
pairs :Pair[]
}
みたいな感じで定義できないもんか。
諦めてnumber[]にするしかない?
595:デフォルトの名無しさん
17/03/28 14:54:23.37 OG3qmdJs.net
タプル使え
596:デフォルトの名無しさん
17/03/28 17:30:18.19 3EkUFmFA.net
>>570
thanks
type Pair = [number,number]
interface Data {
pairs :Pair[]
}
597:デフォルトの名無しさん
17/03/30 23:49:26.09 Ya8jf9nB.net
index.htmlに直接CDNからreactとreact-domを読み込んで
npmからは@types/reactと@types/react-domをインストールし
tsxファイルからimport文を使わずにreactを使ったところ何の問題もなく動いた。
plotly.jsを同じように使おうとしたら自動では定義ファイルを読んでくれない。
この違いは一体何なのか?
と思って定義ファイルを見たところreactとreact-domには以下のような記載がある
export as namespace ReactDOM;
export as namespace React;
上記を真似て定義ファイルに
export as namespace Plotly;
を追加したら同じ挙動になった。
export as namespace XXX ってなんすか?
598:デフォルトの名無しさん
17/03/31 01:47:51.53 y+1gOmlP.net
そのモジュールのグローバル変数化宣言
公式wiki嫁
599:デフォルトの名無しさん
17/04/01 20:31:37.83 es45r1Ne.net
型定義ファイルの書き方がよくわからなくてつんでいます
node-transmission
URLリンク(github.com)
の型定義ファイルが見当たらないので作っているんですが
もとのjsファイルのexport宣言が
var Transmission = module.exports = function (options) {
ってなっている場合に型定義ファイルとして以下のように書いても認識されないです。
declare interface transOptions {
port: number
host: string
}
declare class Transmission {
constructor(optins: transOptions)
}
export default Transmission
使う場合に
import * as Transmission from "transmission";
var transmission = new Transmission({
port : 9091,
host : '127.0.0.1'
});
って書いてもtransmission はany型のようです。
どう書くのが正解でしょうか?
600:デフォルトの名無しさん
17/04/01 22:04:14.42 es45r1Ne.net
>>574
すいません。自己解決しました。
JSのモジュールまじしんどい
601:デフォルトの名無しさん
17/04/09 14:34:29.06 ZBMiMXkM.net
>>41
partial classは不採用になったので一応
Suggestion Backlog Slog, 4/3/2017
URLリンク(github.com)
URLリンク(github.com)
602:デフォルトの名無しさん
17/04/10 14:18:00.18 BK5DCjs2.net
G
603:oogle社内の標準言語としてTypeScriptが承認される。ng-conf 2017 http://www.publickey1.jp/blog/17/googletypescriptng-conf_2017.html
604:デフォルトの名無しさん
17/04/10 18:26:24.79 VEGABUso.net
>>577
Dartどうすんだよ
605:デフォルトの名無しさん
17/04/10 20:28:20.75 kMiVc4KU.net
劣るうえ、使われてないdartは自動消滅。
ホントはわかってたこと。
606:デフォルトの名無しさん
17/04/11 02:02:21.52 Kcnbnd8w.net
typescriptでreduxの実装書くのしんどいね
URLリンク(qiita.com)
こいつを参考に書いてるけど。他にいい書き方があれば
607:デフォルトの名無しさん
17/04/11 07:02:04.43 OeT6CnRN.net
>>580
おまおれ
mapStateToPropsとかの引数も型どうしていいか分からん
608:デフォルトの名無しさん
17/04/11 17:04:01.31 ejHOB/DU.net
>>580
こんなの誰が何に使うの?
609:デフォルトの名無しさん
17/04/11 19:22:39.80 +8we66Ry.net
ほんそれ
610:デフォルトの名無しさん
17/04/11 22:09:52.06 rpuwd/d9.net
TypeScriptでreact-router-reduxに手を出したら大変な目に遭った。
611:デフォルトの名無しさん
17/04/11 22:24:37.23 YJpuA+WP.net
単語が3つ以上入ってるパッケージに近寄りたくない
612:デフォルトの名無しさん
17/04/12 19:01:00.44 BxTB0mZM.net
>>577,578
もうjavaやめてtypescriptでandroidアプリ開発できるようにしてほしい。
でも本心はdart頑張れ。
613:デフォルトの名無しさん
17/04/12 19:19:27.95 usx2Dq45.net
そういうフレームワーク色々あるやん
614:デフォルトの名無しさん
17/04/12 20:26:06.76 IsZRv2xh.net
>>580
これの2.0/2.1用ってのをやってみたら#defineが欲しくなった。
ストリングリテラルを置き換えられるマクロみたいなものってないのかな?
615:デフォルトの名無しさん
17/04/12 20:47:03.00 usx2Dq45.net
>>588
何が欲しいのかよく解らんが
const ABC=”str”
じゃあかんのか?
616:デフォルトの名無しさん
17/04/12 20:56:38.51 IsZRv2xh.net
そのABCはストリングリテラル型には使えんわけよ。
617:デフォルトの名無しさん
17/04/12 21:04:32.60 WRJ4LE6o.net
redux の冗長な書き方をtypescriptの機能でなんとかしてほしいってことなんだろうけど。
react見たくpropsをinterface定義すれば大体いい感じで使える。みたいにredux の方もstateのinterface定義だけでいい感じに出来上がるような仕組みがほしい。
618:デフォルトの名無しさん
17/04/12 21:05:36.55 WRJ4LE6o.net
>>586
つreact native
619:デフォルトの名無しさん
17/04/12 22:41:00.77 mYXXp/Z3.net
>>590
const ABC:"str" = "str";
こういうことか
620:デフォルトの名無しさん
17/04/12 23:07:35.91 IsZRv2xh.net
それ。
strが短いならそのまま書いても一緒だけど、actionのtypeって長くなりがちだから
二重に書くのがつらい。
621:デフォルトの名無しさん
17/04/12 23:08:47.06 0/0fFwi6.net
>>578
TypeScriptが標準言語になっても、Dartのことは忘れてませんよとGoogle担当者がフォロー
URLリンク(www.publickey1.jp)
622:デフォルトの名無しさん
17/04/12 23:50:07.42 29ufoOq3.net
constは型書かなくてもストリングリテラルに推論されるようになったんだが存知ない?
623:デフォルトの名無しさん
17/04/13 00:12:31.67 IFJ42qsr.net
2.1からだね。2.0でも使ってたんだろうか
624:デフォルトの名無しさん
17/04/13 00:19:44.83 rVYtPk7E.net
ストリングリテラルに推論されるって?
これ通らないでしょ?
const STR = "str";
const ABC: STR = STR;
625:デフォルトの名無しさん
17/04/13 00:27:33.33 IFJ42qsr.net
>>598
そりゃ二行目がストリングリテラルじゃないからね
626:デフォルトの名無しさん
17/04/13 00:33:01.65 rVYtPk7E.net
だからそれが書けないから>>594だってことだろ。
結局>>596は何の話をしてたんだ?
627:デフォルトの名無しさん
17/04/13 00:34:18.77 IFJ42qsr.net
なにがやりたいのかよく解らんが
const STR = "str";
const ABC1 = STR;
const ABC2:”str” = ABC1;
type STRT=”str”;
const ABC3:STRT=STR;
全部通るよ
628:デフォルトの名無しさん
17/04/13 00:39:19.82 7ydi5nIB.net
>>600
エラーメッセージも読めない奴がずいぶんと偉そうだな
ドキュメント100回読み直してこい
629:デフォルトの名無しさん
17/04/13 00:40:44.33 rVYtPk7E.net
>>601
やりたいのはそこで言うSTRTとSTRの共通化。
要は同じ"str"を重複して書きたくないってこと。
630:デフォルトの名無しさん
17/04/13 00:44:07.45 7ydi5nIB.net
変数の型の参照なんて初歩の初歩なんだが教えてやるまい
631:デフォルトの名無しさん
17/04/13 01:00:49.62 IFJ42qsr.net
>>603
えっ 普通推論させるから書かないでしょ
わざわざ書かなきゃならなくなるケースってどんな時よ
632:デフォルトの名無しさん
17/04/13 01:13:36.05 rVYtPk7E.net
const STR = "str";
type STRT = "str";
const ABC3: STRT=STR;
"str"を2回書かずにABC3が作れればそれでいいんだけど。
633:デフォルトの名無しさん
17/04/13 01:20:51.05 IFJ42qsr.net
>>606
const STR = "str";
const ABC3 = STR;
634:デフォルトの名無しさん
17/04/13 06:09:08.50 32cPtkAw.net
type STRT = typeof STR
635:デフォルトの名無しさん
17/04/13 08:01:19.65 rVYtPk7E.net
すまん、確かに思い違いしていたようだ。ありがとう。
636:デフォルトの名無しさん
17/04/13 13:00:24.68 XE18llYI.net
恥ずかしか
637:デフォルトの名無しさん
17/04/13 20:33:25.78 IFJ42qsr.net
認めて謝って感謝してるだけ立派だよ
638:デフォルトの名無しさん
17/04/16 20:56:40.61 nOhMz2bP.net
TypeScriptでExpressを使う場合について教えてください。
express-generatorなどのサンプルコードだと new Error したオブジェクトにstatusを
突っ込んで返していたりしますが、ここ、TypeScript的にはどうするのが普通でしょう?
みなさん自前でErrorのサブクラスを定義しているんでしょうか?あるいはどこかに
定番のものがあったりするんでしょうか?
639:デフォルトの名無しさん
17/04/16 22:51:14.41 SqhlDt4o.net
「どうでもいい」が普通じゃない?
そんなもんエラーハンドラで受けて適当にトレースとエラーメッセージ出したら終わりなんだから
型なんぞ要らん
手段と目的を履き違えるな
640:デフォルトの名無しさん
17/04/16 23:30:20.32 R4TJTEcK.net
>>612
jsonとして扱えるようにインターフェース定義にしておいたほうが無難な気がする。
シリアライズしても簡単にもとに戻せるし。
641:デフォルトの名無しさん
17/04/17 00:09:50.93 CyuLkfZA.net
そういうもんですかね?
エラーを表示するだけとは言ってもstatusは正しくセットしなきゃならないわけで、
TypeScriptを使う以上そこも型安全にやりたいってのは自然だと思うんですが。
そこだけtslintの警告をネグるのも気持ち悪いし。
642:デフォルトの名無しさん
17/04/17 00:24:52.52 GVmJ+xSa.net
アプリケーションの仕様としてエラー用のクラスを定義します。Errorのサブクラスだったり新規に自前のクラスを用意するかはケースバイケース。
当然途中で変わることもあり得ます。その際はきちんと他のメンバーと情報共有します。
643:デフォルトの名無しさん
17/04/17 07:32:40.57 k0Nquy2H.net
自分は簡単なアプリではHttpErrorみたいなクラスを定義して使ってる。
もっと複雑なアプリだと、業務エラーのコードとHTTPのエラーコードで
もう一階層作ったりもするけど。
だが、これが推奨なやり方なのかは分からん。俺も知りたい。
644:デフォルトの名無しさん
17/04/17 08:40:01.39 CyuLkfZA.net
ありがとうございます。
statusというプロパティにステータスを返すのは決まっているんだからどこかに
出来合いのものがあるかと思ったんですが、やっぱり自前なんですね。
645:デフォルトの名無しさん
17/04/20 11:26:28.02 T7Zz78Cb.net
npm linkを駆使してtypescriptでビジネスロジックを外部モジュールにしてるんだけど
tsc -wで自動コンパイルはできるんだけど
定義ファイルも同時に生成するコマンドオプションってないかな?
646:デフォルトの名無しさん
17/04/20 11:42:22.36 T7Zz78Cb.net
>>619 すんません -w -dですね。ホント申し訳ない
648:デフォルトの名無しさん
17/04/21 21:22:59.73 Uj6lwvRH.net
TypeScriptで動的なキャストみたいなことってできるんでしょうか?
// どこかで定義されたclass
class X {}
interface AX extends X {
a: string;
}
func(x: X) {
if ( xが a: string というプロパティを持っていれば ) {
// ここではxをAXとして扱いたい
}
}
649:デフォルトの名無しさん
17/04/22 00:25:56.48 NysYFg8M.net
>>621
let ax=<AX>x
でキャスト出来る。
インターフェースが存在するかどうかはチェックはされないから注意。
650:デフォルトの名無しさん
17/04/22 10:55:16.81 scznilxz.net
>>622
ありがとうございました。うまくいきました。
651:デフォルトの名無しさん
17/04/26 12:25:16.92 mOputr8e.net
f8appのコード読んでんだけど
flowって驚くほどtypeScriptと似てるね。
んでReduxのアクションな書き方が参考になる。
type ParseObject = Object;
export type Action =
{ type: 'LOADED_ABOUT', list: Array<ParseObject> }
| { type: 'LOADED_NOTIFICATIONS', list: Array<ParseObject> }
| { type: 'LOADED_MAPS', list: Array<ParseObject> }
コレ普通にtypeScriptでも使えた。
interface宣言だとこういう書き方できなけどtype宣言だとできんのね。
652:デフォルトの名無しさん
17/04/27 14:10:54.61 2oprloyo.net
いやーTypeScriptって本当にいいものですよね
恥ずかしいソース書いてもコンパイルすればそれなりの形になってますし
全ソースが1つにまとまったjsファイルを見るとカタルシスを覚えます
javascriptを扱うのに最高の言語です
653:デフォルトの名無しさん
17/04/27 16:28:37.55 a+4IBLmk.net
開発用と納品用でコードわけられるとかありがたい
654:デフォルトの名無しさん
17/04/27 17:45:10.06 /9P4GBtP.net
minifyが出来なくて悩んでおります。
Targetをes5にしてもエラーが出る。
655:デフォルトの名無しさん
17/04/28 08:31:59.89 IMlkcp1b.net
>>627
結局該当箇所っぽいところの構造を変えて解決した
case 'Text':
{
let text: Text;
/* ごちゃごちゃした処理*/
text = {
type: 'Text',
value: node.value,
cache: nodeCache
};
return text;
}
ってなってるところで
なぜがtextという変数がminifyで消えずに残っていてエラーになっていたところ
case 'Text':
{
// let text: Text; <―削除
/* ごちゃごちゃした処理*/
let text:Text = {
type: 'Text',
value: node.value,
cache: nodeCache
};
return text;
}
ってしたら治った。
656:デフォルトの名無しさん
17/04/28 09:00:40.63 IMlkcp1b.net
すいませんminifyの件ですが一番の問題は
外部ライブラリとして別にパッケージを作ってnpm linkしていたんですが
その外部ライブラリのtsconfigの設定でtargetをes2015にしていたのが原因のようです。
npm上で公開してるライブラリってes2015のものとes5のものが混ざってるんですかね?もしそうならminifyのとき問題でそう。
そろそろブラウザもes2015に対応してきたし外部ライブラリもes2015でいいんじゃないかと思いましたがまだまだes5のほうがいいんですかねー
657:デフォルトの名無しさん
17/04/28 15:19:33.29 ZmVIrkLy.net
Announcing TypeScript 2.3
URLリンク(blogs.msdn.microsoft.com)
658:デフォルトの名無しさん
17/04/28 21:52:24.09 CfPEmNk9.net
>>629
ちゃんと設定すれば、TypeScriptが変換してくれるんじゃないの?
659:デフォルトの名無しさん
17/04/29 00:20:26.49 Ix6JNrOr.net
>>631
targetをes5にしてlibに”dom”と”es2017”を設定したら
ちゃんとminifyもできつつasync await とかobject.assaignとか使えました。
typescriptの問題というよりuglify-jsの問題ってことすね。
660:デフォルトの名無しさん
17/04/29 08:40:51.51 fFSdol5k.net
>>630
ギャー!!
適用したらエラーだら�
661:ッになった!!
662:デフォルトの名無しさん
17/04/29 09:01:35.78 fFSdol5k.net
アンインストールしたらVSでtsファイル開いても識別子の色分けとかインテリセンスが出てこなくなってVSぶっ壊れたわ
再インストールだなこりゃ
663:デフォルトの名無しさん
17/04/29 09:05:24.76 fFSdol5k.net
2.3アンインストール後に再度2.3インストールしてもぶっ壊れたまま
迂闊に入れないほうがいいなこれ
664:デフォルトの名無しさん
17/04/29 14:53:43.74 D/W8thCK.net
馬鹿には無理
665:デフォルトの名無しさん
17/04/30 09:24:14.29 V5NYhrdd.net
不細工ハゲが偉そうに
666:デフォルトの名無しさん
17/04/30 11:46:36.73 A3RU6CWl.net
不細工じゃねーし!
667:デフォルトの名無しさん
17/04/30 12:00:27.54 0Jw8BHIT.net
相対パスでimportしようとすると from ’../../lib/a’ と書くことが多いのですが
..を何とかしようと思いtsconfigでbaseUrlを設定したところ
from ‘lib/a’とかけるようになって素敵だったんですが
生成したjs側で同じように相対パスを使わない方法にできずjs側からimportできなくなりました。
どうすればいいんですかね
668:デフォルトの名無しさん
17/04/30 12:07:35.75 VPr4LyhY.net
deployしてみ
669:デフォルトの名無しさん
17/04/30 13:53:10.60 bwYTEyCy.net
おい、>>638に突っ込めよ!
670:デフォルトの名無しさん
17/04/30 14:18:46.56 uAfPQWLU.net
ハゲに付ける薬なし
671:デフォルトの名無しさん
17/05/01 13:56:45.49 1hc/XS6U.net
jsonのデシリアライズ等で得られた任意のオブジェクトが指定のinterfaceに適合するかどうか
簡単に判定する方法ってないでしょうか?
実行コストがかかるのはしょうがないので、npmのライブラリでもあれば助かります。
672:デフォルトの名無しさん
17/05/01 14:12:45.68 y6q+iQAV.net
実行時に型情報は取得できないので無理
673:デフォルトの名無しさん
17/05/01 14:56:45.23 dX7m944z.net
>>643
俺は各interfaceの定義にtypeを入れてる。
674:デフォルトの名無しさん
17/05/01 15:43:26.17 FD8bdV22.net
>>643
あーなるほどtypesciptのinterface要件を満たしてるかチェックするライブラリかー。
interfaceに対するメタプログラミングができる仕組みってtypescript側に用意されてんのかな
675:デフォルトの名無しさん
17/05/01 16:42:03.86 y6q+iQAV.net
ランゲージサービスから情報引っ張ってコード生成するまでやればできる
676:デフォルトの名無しさん
17/05/01 18:22:52.40 s/VndsAg.net
>>643
初心者なんで教えて欲しいんですが
どう言う状況でそう言うのが必要に
なるんですか?
677:デフォルトの名無しさん
17/05/01 22:27:57.85 1hc/XS6U.net
>>644-648
回答ありがとうございます。
外部から入手したany型のオブジェクトに対して、一度型チェックしたらTypeGuardの下で
扱えたら便利だと思ったんですが、そう単純なものはなさそうですね。
interface毎にUser-Defined Type Guard Functionてのを用意するのが今のところ
いちばんシンプルですかね。
678:デフォルトの名無しさん
17/05/01 23:04:54.13 FD8bdV22.net
>>647
interfaceをparseするの簡単にできたわ
ジェネレータは作れそう。後はObjectを チェックするコードをかければ、、、
そっちがよくわかんないな。
679:デフォルトの名無しさん
17/05/02 00:15:01.17 79+IkLPk.net
JSON限定でいいならJSON Schema生成するだけじゃね
680:デフォルトの名無しさん
17/05/05 00:50:33.95 oXL5lOIH.net
webpackでtypescript使う時にts-loaderがtypeRootsオプションを認識してくれないような。
自作の定義ファイルを読みに行ってくれない。
結局nodes_modules/@types/においたらうごくんだけど。なんだかなぁ
681:デフォルトの名無しさん
17/05/05 10:24:07.07 E/UcmmKD.net
-g
682:デフォルトの名無しさん
17/05/07 12:47:49.44 tRHTfDHo.net
redux のreducer書く時型付きじゃないと死ぬ。
素のjsでよく書ける人いるなぁ
683:デフォルトの名無しさん
17/05/10 22:53:30.65 TahTqR8d.net
>>651
これやってみようかと思ったけど、
684:class定義からschema生成するか逆にschemaから生成するか、 どっちがいいか悩ましいなぁ。
685:デフォルトの名無しさん
17/05/11 06:23:41.84 6GcWGmCe.net
JSON Schemaの方が表現力がずっと高いから、
実用的に意味があるのは後者だろうね
型だけなら全部空文字と0とfalseでもいいんだから
686:デフォルトの名無しさん
17/05/11 06:40:52.39 Uo4oHcSP.net
JSON Schemaからのdts生成は既存のツールがいくつかあるみたいだな
逆はバリデーションとしてはほぼ無意味かと
687:デフォルトの名無しさん
17/05/11 21:37:19.65 Foo76VTo.net
目的が上で書いているようにシリアライズ-デシリアライズされたオブジェクトの型の復元なら、
interface定義を自分で書いてschemaは裏方というのが自然だとは思うが。
ただ、schemaを生成する方のツールは技術的にハードルが高いせいか選択肢があまりないな。
688:デフォルトの名無しさん
17/05/15 21:27:32.04 ZdTGw5ha.net
そもそもシリアライズという発想自体がJavaScript的でないと思うけどね
データスキーマから入るのがJSでしょ
689:デフォルトの名無しさん
17/05/15 22:43:08.64 JDFIgPdx.net
シリアライズってJSONのこと言ってるわけだろ。
言語自体にサポートの無いC++などと比べてもよっぽど馴染みがあると思うが。
で、JavaScriptだとそこまででいいんだけど、TypeScriptで型まで戻すにはどうするか?って話だろ。
690:デフォルトの名無しさん
17/05/15 23:00:01.30 ZdTGw5ha.net
バリデーションとシリアライズが別系統なのは煩雑じゃない?
コードだけで全部定義するならアノテーション使うなりしてJSON Schema相当の表現力は欲しいし、
割り切って別にするならシリアライズ系の方は中途半端なバリデーションなんかいっそ無しにて
ノーチェックでいいと思うよ
691:デフォルトの名無しさん
17/05/15 23:16:34.01 JDFIgPdx.net
うん、上から目線で何か言いたいという気持ちだけは伝わった。
692:デフォルトの名無しさん
17/05/15 23:59:53.11 5dbS9yKw.net
URLリンク(stackoverflow.com)
Yesの回答にそれっぽいコードがあるが本当に動作するのか疑問。
他はSchemaを使う回答だが、よほどでないと大袈裟な気も。
693:デフォルトの名無しさん
17/05/16 00:46:18.76 6a8gh5yc.net
自分でコンパイラ拡張して実装したみたいだけどこういうの本家の更新についてけずに陳腐化するのが常だから使えない
ついでにビルドツールなどのエコシステムも使えない
694:デフォルトの名無しさん
17/05/16 07:36:06.00 MR0lnxJG.net
正攻法だとanyを受け取って目的の型のオブジェクトにして返す関数を用意することになるんだろうが、
やることは同じようなものなのにそれぞれ型ごとに個別に用意しなければならないのが煩雑だな。
よっぽど重要な型でしかやりたくない感じ。
確かにこれが、型ガードの感覚で気軽に使えるようになったら便利だと思うけど。
695:デフォルトの名無しさん
17/05/16 08:02:09.48 64KrDfHK.net
TypeScriptの思想的にもスキーマありきで型は後付けの方が自然だと思うわ
696:デフォルトの名無しさん
17/05/16 08:27:24.80 MR0lnxJG.net
その「スキーマ」が何を指しているかよくわからんな。
まさか「JSON schemaありき」って言いたいわけじゃないだろうが。
697:デフォルトの名無しさん
17/05/16 09:01:29.19 64KrDfHK.net
>>667
別に実装は何でもいいんじゃない?
先にJSONドキュメントそのものを設計しろってこと
698:デフォルトの名無しさん
17/05/16 10:11:34.64 Jgr59aIg.net
objectを先に設計してstringifyの方が一般的だと思うが。
つまりtsなら型が先。
699:デフォルトの名無しさん
17/05/16 13:21:49.91 xkpWN83w.net
jsonに対するinterface適用にわざわざスキーマ使うのはだるいな。
やはりメンバにtypeとかを事前に追加しておいて、そこを見てキャストさせるほうが楽だわ。
700:もちろんそのjson自体が自分で改変可能である必要はあるが。
701:デフォルトの名無しさん
17/05/16 13:49:23.26 6a8gh5yc.net
言語がサポートしてるのはその使い方だからな
702:デフォルトの名無しさん
17/05/16 14:24:04.58 KRJlMJox.net
TypeScript ⇔ JSONSchema を相互に変換するコードは既に転がってるから
どちらでも好みで原本にすれば良いんじゃないの?
まぁあまり自動化を頑張っても、構造が複雑になると結局手書きが必要になる分野だとは思うけど
703:デフォルトの名無しさん
17/05/16 14:48:54.41 64KrDfHK.net
型で記述しきれないバリデーションについてはDecoratorsを使うのがベストなんだろうけど、
interfaceには使えないんだよな
まあJSONだけならそれでもいいかもしれないが
704:デフォルトの名無しさん
17/05/16 15:28:34.19 6a8gh5yc.net
リリースノートも見ずにオレオレソリューションひねり出すのやめない?
URLリンク(github.com)
705:デフォルトの名無しさん
17/05/16 15:33:13.80 4P1sgrCm.net
interfaceがトランスパイル後に消滅しちゃうの辛いよな。
言語機能でいい感じに残す機能つけてほしいが、そういう提案ってないの?
最近ついたというプラグインで可能になる?
706:デフォルトの名無しさん
17/05/16 15:42:38.42 6a8gh5yc.net
>>663で公式で却下されたと書いてある
まあESの仕様壊すし残当
707:デフォルトの名無しさん
17/05/16 15:48:01.77 KRJlMJox.net
>>674
この文脈 (>>643, 648) では、型フィールドを信用するのはノーチェックと同じ意味だぞ
外部からのデータが、内部的な制約を満たすことの保証を求めてる
708:デフォルトの名無しさん
17/05/16 16:10:10.21 6a8gh5yc.net
いや関数に隠蔽すれば壊すまではいかんか
>>677
入力データの検査も値レベルの制約も手でやること
型システムに求めることじゃない
型を信じてノーチェックが型安全でありそうでなければオーバーヘッドで死ぬ
本人もタイプガードで満足してるしそれが正解
709:デフォルトの名無しさん
17/05/16 17:11:36.85 rTo/YyDO.net
>>676
まぁESの仕様+型だけだから学習コストが低いってのはあるしね。 でも直感的にinterface定義が消えちゃうのはなんだかなぁって気はする。
こうなったらES側に頑張ってもらうしかないな。パターンマッチング付けてー
710:デフォルトの名無しさん
17/05/29 18:33:36.63 DGY6L2yw.net
>>652
コレが解決した。
悩んでいつつも暫定対処で乗り切ってただけに小骨が喉に刺さっているような気分でしたわ。
結論としてはtypeRootsオプションは/// <reference types=".." />
を使う時のpath解決でしか使わないって。
ハンドブックをどう読んでもそう書いているように見えない。
711:デフォルトの名無しさん
17/06/02 03:21:08.54 0selKGQ0.net
typescriptでimmutablejs使ってるけどいまいち恩恵を得づらい。
updateInとかパスが補完効いたり出来ればいいのに
712:デフォルトの名無しさん
17/06/02 08:57:46.98 vyfZNbsR.net
thisを変数に入れたいときの変数名ってみんな何してる?
_thisが使えればいいんだけどなー
713:デフォルトの名無しさん
17/06/02 09:08:17.58 Ef+/+PyI.net
変数に入れた後のthisはthisなんですか・・・・?
714:デフォルトの名無しさん
17/06/02 09:09:32.94 lCCVb2h3.net
thatだがそもそもそんなこと必要にならない
715:デフォルトの名無しさん
17/06/02 09:20:29.61 8OnrstJc.net
JavaScriptのクロージャにおけるthis問題の回避はselfが定番
TypeScriptで必要なケースは少ないはずだけど
716:デフォルトの名無しさん
17/06/02 09:43:18.53 LceXbV2F.net
>>682
_thisはダメなの?
717:デフォルトの名無しさん
17/06/02 10:31:35.82 QxLZOlf9.net
_thisは重複エラーになっちゃうんでやすよね
目的としては、deferredを返すfunctionがあって、その返り値のdoneで呼び元のthisを使いたいんです
718:デフォルトの名無しさん
17/06/02 11:16:51.90 Ef+/+PyI.net
やりたいことが分からん
コード例plz
719:デフォルトの名無しさん
17/06/02 11:38:44.20 lCCVb2h3.net
アロー関数で済むやつでは
720:デフォルトの名無しさん
17/06/02 12:13:45.27 QxLZOlf9.net
>>688
var testFucntion = () => {
var defer = $.Deferred();
defer.resolve("a");
return defer.promise();
}
var hoge: string;
testFucntion()
.done(function (data: string) {
this.hoge(data);
})
こんな感じ
721:デフォルトの名無しさん
17/06/02 12:15:24.11 Ef+/+PyI.net
>>690
>>689
722:デフォルトの名無しさん
17/06/02 12:17:24.53 lCCVb2h3.net
草www
723:デフォルトの名無しさん
17/06/02 12:20:14.11 jbvcqQ/c.net
自演乙としか
724:デフォルトの名無しさん
17/06/02 23:52:05.01 7H2+/kur.net
functionが自然な場所は、アローにしてて、
アローで解決できる箇所はfunctionなのはなぜ。
725:デフォルトの名無しさん
17/06/03 02:14:50.79 QIr3+kxI.net
>>690
doneのほうをアロー式にしたらいいんやで
あとvsで開発してる場合、デバッグ時にウォッチしたとき、そのthisにはtestFucntionが入るけど
実際にはちゃんと使いたい値が入ってるから安心しな
726:デフォルトの名無しさん
17/06/03 09:18:06.31 bm3mvh5f.net
アロー使えばselfいらないって知った時感動した
727:デフォルトの名無しさん
17/06/04 01:06:25.77 ioiT3hTG.net
Angular(2以降)の話題もここでよろしょうございますか?
728:デフォルトの名無しさん
17/06/04 02:05:52.05 fuFkI60h.net
まったくではないが違うんじゃないか?
729:デフォルトの名無しさん
17/06/04 05:58:20.77 xlmC5HkR.net
スレリンク(php板)
730:デフォルトの名無しさん
17/06/11 19:15:01.32 AskXGu9A.net
interface A{
x:string;
y:string;
}
interface B extends A{
x:number;
}
が型の互換性エラーになるの何とかならない?
let a={x:'hoge',y:'foo'};
let b={...a,{x:1}};
みたいな事は出来るのにbを現す型を簡単に定義出来ないのが辛い
731:デフォルトの名無しさん
17/06/11 19:18:40.94 AskXGu9A.net
>>697
ngxのスレは別にある
732:デフォルトの名無しさん
17/06/11 19:55:36.52 AskXGu9A.net
>>699
2以降はこっち
スレリンク(hp板)
733:デフォルトの名無しさん
17/06/11 20:29:27.66 zURolSWc.net
>>700
型が変わったら継承できないのは当たり前では?
interface Parent {
x: string | number;
y: string;
}
interface A extends Parent {
x: string;
}
interface B extends Parent {
x: number;
}
こういう関係が正しい関係では?
734:デフォルトの名無しさん
17/06/11 21:09:00.82 y28miZDE.net
理解してない奴を炙り出すのにも静的チェックは必要なんやなって
735:デフォルトの名無しさん
17/06/11 21:21:16.05 QZNztTAY.net
>>703
プロパティだとセットのときを考えるとcontravariantじゃないとダメだしゲットのときにはcovariantじゃないとダメだから結局invariantが必要になるような気がする
アクセサならsetのパラメタとgetの返却値で型が異なってもいいから問題ないと思うけど
736:デフォルトの名無しさん
17/06/11 22:09:32.03 AskXGu9A.net
>>703
継承出来ないのは当たり前って言うのは分かる
ただ上書きする構文が欲しい
737:デフォルトの名無しさん
17/06/11 22:13:08.61 QZNztTAY.net
>>706
ジェネリクスあるし上書きする構文が必要になる状況が分からん
738:デフォルトの名無しさん
17/06/11 22:22:11.45 eD+QASKK.net
上書きなんぞせずとも別の名前付ければよくね?
デメリットしか思い付かないし実装されないと思うが、仮に実装されたとしても予想される実装方法はBの型を通してアクセスしたときは型名とかをprefix付けた別名になるようにトランスパイルされるようになるだけでしょ
739:デフォルトの名無しさん
17/06/11 23:47:19.06 fVYgJSKO.net
extends Aじゃないけどその定義を流用してBを定義したいということか?
740:デフォルトの名無しさん
17/06/11 23:48:25.17 AskXGu9A.net
>>709
そういう事
741:デフォルトの名無しさん
17/06/11 23:49:49.29 AskXGu9A.net
B extends Aじゃないから当然
(hoge:B)=>{
let foo:A=hoge;
}
みたいな事は出来なくて良い(というか出来ない)
742:デフォルトの名無しさん
17/06/12 00:58:34.90 F6aJQHtJ.net
継承じゃないんだから諦めてジェネリクス使いなよ
743:デフォルトの名無しさん
17/06/12 08:01:38.24 9hAA1jJ7.net
世の中にxがstringかnumberの場合があるのなら、x: string | number という定義が正しい気がしますが
744:デフォルトの名無しさん
17/06/12 08:11:52.28 R1uj6Z8h.net
ジェネリクスだと>>700の問題がどこまで解決できるんだろう。
745:デフォルトの名無しさん
17/06/12 08:26:45.30 vVucOmau.net
>>714
interface X<T> {
x: T;
y: string;
}
interface A extends X<string> { }
interface B extends X<number> { }
746:デフォルトの名無しさん
17/06/12 18:05:51.91 i2S9/2aT.net
flowとtypescriptって
どっちが良いの?
747:デフォルトの名無しさん
17/06/12 18:14:08.97 /bUB16QZ.net
>>716
圧倒的TypeScript
異論は見ろめない
748:デフォルトの名無しさん
17/06/12 21:00:25.44 5UNDPLtW.net
酔うの早すぎるだろ
749:デフォルトの名無しさん
17/06/13 22:10:43.81 PMWJJsvl.net
Announcing TypeScript 2.4 RC
URLリンク(blogs.msdn.microsoft.com)
750:デフォルトの名無しさん
17/06/14 08:28:34.92 TtxDPC/b.net
enumってstring literal型出てからほぼ使わなくなったからなあ
コード内でimportできるのもよくわからん
何がよくなったんだ
751:デフォルトの名無しさん
17/06/14 09:04:40.52 t483F9YG.net
新importは関数であることに意味がある
752:デフォルトの名無しさん
17/06/14 21:28:45.57 YgZhsY+k.net
>>721
なるほど Promiseで返すってことはasync await 前提なんかな。
ちょっと非同期周りで互換性のないライブラリ使ってると途端に不便になるから
一長一短ではあるんだけど。全部がPromise使うライブラリで固められれば便利になるんかな。
753:デフォルトの名無しさん
17/06/14 21:29:54.91 YgZhsY+k.net
jsの仕様変更そろそろ収まって欲しい。
import周りってこれで安定するようになるのかな。
754:デフォルトの名無しさん
17/06/15 19:20:45.69 Zba3QY3O.net
filterの中でasync await って使えないんですかね?
755:デフォルトの名無しさん
17/06/15 19:24:11.68 xqojsLNP.net
>>724
無理
rxjs使うか設計見なおせ
具体的に何をしたい?
756:デフォルトの名無しさん
17/06/15 21:25:19.64 Zba3QY3O.net
filterの評価関数を作ろうとした時に、今まで作ったやつが全部プロミス返す設計になっていたので、
シームレスに使おうとしたらasync-awaitを使えないかなーと。
将来的にここもasync await使えるようになるのかな。
結局ループを回して絞込処理を実装しましたわ。
757:デフォルトの名無しさん
17/06/15 21:30:12.69 xqojsLNP.net
rxjs使え
758:デフォルトの名無しさん
17/06/15 21:32:03.12 xqojsLNP.net
それか自作。そんなに難しくないぞ
759:デフォルトの名無しさん
17/06/16 01:22:09.50 uNQVqIhb
760:.net
761:デフォルトの名無しさん
17/06/16 07:51:13.34 VSZ6CfqO.net
ループでawaitしちゃうってパフォーマンス悪くない?
await promise.all([].map(async () => {}))
こういうのが普通では?
762:デフォルトの名無しさん
17/06/16 12:37:39.06 uNQVqIhb.net
>>730
ずっとpromise.allの存在を失念してた。
これでmap的な使い方できるね。
ところでtypescriptのプロジェクトで自作helperライブラリを使う時にいちいちimportを使うのが面倒くさいんで
自動でimportする設定ってtsconfigにないかな?
763:デフォルトの名無しさん
17/06/17 10:56:23.79 254ieyWi.net
typescript便利だけどやっぱり型が後付の弊害がなかなかしんどい。
nullを許
764:容しない前提かと思って使っても結局 実体はnullが突っ込んであったり する。
765:デフォルトの名無しさん
17/06/17 17:32:41.06 Jhwo6DZg.net
弊害じゃなくて人為的ミス
誤りに気付いた者が正せばいい
766:デフォルトの名無しさん
17/06/17 22:27:47.68 254ieyWi.net
swaggerのジェネレーターが出すコードなんだよね。プルリク出すのが面倒です
767:デフォルトの名無しさん
17/06/18 00:50:13.20 GScuub4f.net
サーバーサイドの言語仕様とswaggerがstrict null checkに対応してないだけであって
typescriptは何も悪くないのでは
768:デフォルトの名無しさん
17/06/18 15:17:38.51 xPH4G83l.net
ほんそれ
769:デフォルトの名無しさん
17/06/18 20:34:02.75 9Ms8Oqe4.net
>>735
本体がstrict null check対応しても
モジュール側が対応してないとそこは無視するってことです?
例えばモジュールが強制的に T | undefined | null 型になるとかならいいんですけどね
770:デフォルトの名無しさん
17/06/19 00:15:28.42 2IBzsU2g.net
type Action =
{
type: “A”,
id: number
} |
{
type: “B”,
payload: any
} ….
みたいな定義がある時に
interface ALias {
[type: Action.type]: () => any;
}
export default <Alias> {
“A”: func1,
“B”: func2,
}
みたいに書けないですかね?
つまりAction.typeをinterface の条件に入れたいってことなんですが。
771:デフォルトの名無しさん
17/06/19 09:56:19.65 nrLP7Uu1.net
インデックスシグネチャがstringかnumberしか受け入れない現状では
Aliasを定義する時点でキー(Action.typeの値)が
分かってるなら interface Alias { 'A'?: Func; 'B'?: Func; }
分からないなら interface Alias { [type: string]: Func; }
772:デフォルトの名無しさん
17/06/19 20:30:47.90 8qDOjcU2.net
>>731
interface Actions {
A: {id: number};
B: {payload: any}
}
interface Arias {[key in keyof Actions]: () => Actions[key]}
こういうことかな?
773:デフォルトの名無しさん
17/06/19 21:29:43.40 GKod7M3S.net
携帯から書いたけどエラー起きてるし意図理解できてなかった。
こういうことかな?
type Action = { type: "A" } | {type: "B"};
type Arias = {[K in Action["type"]]: () => void}
URLリンク(i.imgur.com)
774:デフォルトの名無しさん
17/06/19 22:19:36.13 p+TikfUB.net
Arias(笑)
775:デフォルトの名無しさん
17/06/20 16:14:46.75 Nl8VP77v.net
>>741
おー。聞いてみて良かったです。半分諦めてたんで。
上手く動きました。ありがとうございます。
776:デフォルトの名無しさん
17/06/21 12:13:37.61 qahQSwg3.net
>>743
もっとこういう質問で賑わってほしい
書いてて気持ちいい言語だから
angularやreactは流行らなくていいけどフロント開発の標準はtypescriptになってほしい
777:デフォルトの名無しさん
17/06/21 14:47:30.10 CAzvCkNY.net
>>744
定義ファイルがなくて自作するハメになると途端に苦痛になるけどな。
あとReactというかReduxつかってて合わせてimmutable.js使ってると
いつの間にかclassがjsonに変わってることがあってその場合はtypescriptの型と合わなくなるから
しんどい。型が後付じゃない言語ならこういうことがないから、ちょっと辛い。
結局reducer内で使う時にjsonからimmuatblejsのclassに変換して
state返す時にjsonに戻す処理を毎回入れる方針になった。
immutable.jsは全然typescriptと相性が良くない。
XXX.set(‘member’, value) みたいな構文になるから。
もっとtypescriptで使いやすいimmutableなライブラリないかしら。
778:デフォルトの名無しさん
17/06/21 16:08:20.66 QjjhDd/n.net
>>745
新バージョンではXXX.setが型安全になるからもう少し待て
リテラル型とkeyofを使うらしい
779:デフォルトの名無しさん
17/06/21 19:23:40.28 CAzvCkNY.net
URLリンク(goo.gl)
780: こんな感じのコードでファイルのアップロード処理を作りたいんですが 上手く動かなくて悩んでいます。 お助け下さい
781:デフォルトの名無しさん
17/06/21 21:09:26.65 nUhsZ0ik.net
>>747
ブラウザのセキュリティ設定で、`input.click()`はfileエレメントには効かないみたいですね。
URLリンク(stackoverflow.com)
782:デフォルトの名無しさん
17/06/21 21:50:59.59 nUhsZ0ik.net
>>745
immutablejsというのは使ったことないけど、
XXX.set(‘member’, value)みたいな処理もkeyof使ってラップしてあげればkey毎に違う型のvalueに対応できる。
例えばES6のMap<K,V>クラスをラップすれば以下みたいなこともできる。
まあ新しいバージョンで対応されるならわざわざラップクラス作る必要ないがw
class TypeSafeMap...(省略
interface IObject {
name: string;
height: number;
isYes: boolean;
}
const safeMap = new TypeSafeMap<IObject>();
safeMap.get("name") // string型
safeMap.get("height") // number型
safeMap.set("name", 1) // NG
safeMap.set("name", "one") // OK
URLリンク(goo.gl)
783:デフォルトの名無しさん
17/06/21 22:49:52.97 CAzvCkNY.net
>>748
こちらは結局 イベントリスナーをcickではなくchange にすることで上手く動くようになりました。
>>749
typescriptのジェネリクスの性能いいですね。
結構知らない機能がまだありそう。
784:デフォルトの名無しさん
17/06/22 00:17:25.62 u6z6+xvR.net
>>750
それはよかったです、てっきりclickイベントをjsで発火させてファイル選択ダイアログを自動で開かせたいのか思ったw
785:デフォルトの名無しさん
17/06/22 17:18:45.24 77+4f1XL.net
>>751
そうなんですけどリスナーのイベント指定がclickではなくchnageだったってことです。
URLリンク(goo.gl)
before
i.addEventListener(‘click’, async (e) => {
after
i.addEventListener('change', async (e) => {
786:デフォルトの名無しさん
17/06/22 18:30:45.28 b2Lz7aux.net
>>752
たしかのそれもひとつの原因ですね
ですがclickイベントの発火も多分動かないのでは?chブラウザにもよると思いますがchromeで動かなかったですよ
787:デフォルトの名無しさん
17/06/22 19:47:44.81 77+4f1XL.net
>>753
動きましたよ。少なくともchromeでは。動くコードを>>752に貼ったんで
788:デフォルトの名無しさん
17/06/22 20:06:21.77 u6z6+xvR.net
>>754
>>752は手動のクリックイベントからclick発火してるので動きますね
>>747はsettimeout内でclick発火してるので、動かないです
789:デフォルトの名無しさん
17/06/24 00:04:21.44 7kzB7ca0.net
typescriptでreduxのミドルウェア書いてる人っていませんか?
export interface Middleware {
<S>(api: MiddlewareAPI<S>): (next: Dispatch<S>) => Dispatch<S>;
}
上記interfaceを満たすコードを書けなくて困ってます。サンプルコード的なのどっかにないですかね?
790:デフォルトの名無しさん
17/06/25 15:04:59.28 k1gomwYO.net
reduxってreact関係の何かなのかな?
相変わらずreactの作法は意味不明
流行らずに消えてほしい
791:デフォルトの名無しさん
17/06/25 15:18:46.73 dKXT3hQ7.net
すみません
今パッケージングというのかライブラリのシステムは何を使うのが正解何ですか?
electronやってみようと思ってタイプライブラリをいれようと思っていろいろなサイト見てやってるんですが
どれも失敗します
今の定番の方法を紹介してるサイトってありませんか?
それとも今は時期がまずいんでしょうか?
792:デフォルトの名無しさん
17/06/25 16:41:50.61 OCPIhIaN.net
npm -i @types/XXXX
793:デフォルトの名無しさん
17/06/25 17:11:28.11 k1gomwYO.net
>>758
よくわからないけどelectronのtypescript開発は少しややこしい
メインプロセス側と画面側でプロジェクト分けるのが主流で、メインプロセス側はgulpビルド、画面側はwebpackビルドみたいになって少しややこしい
794:デフォルトの名無しさん
17/06/25 19:32:19.06 o1GCb4AX.net
回答ありがとうございました
もうしばらく待ってみます
795:デフォルトの名無しさん
17/06/26 10:42:55.52 B+I0vs4D.net
>>757
はやっちゃってるんだよなぁ。
React自体は凄くTypeScriptとの親和性は高い。というかむしろ推奨しているくらい。
ただReduxはTypeScriptからどう使えばいいのかよくわからなくて
796:デフォルトの名無しさん
17/06/26 15:37:27.06 B+I0vs4D.net
>>756
自己解決したので書いておきます
ただのロガーの場合
import { Action } from 'actions';
import { State } from 'reducers';
export function myMiddleware(store: redux.MiddlewareAPI<State>):
(next: redux.Dispatch<State>) => redux.Dispatch<State> {
return (next: redux.Dispatch<State>) => (action: Action): Action => {
console.log(store.getState());
let result = next(action);
console.log(store.getState());
return result;
};
}
797:デフォルトの名無しさん
17/06/27 16:22:46.76 xkXC4vKS.net
typescriptで書かれてる有名なライブラリって何があるの?
Rx.jsはtypeScriptで書かれてたね。
798:デフォルトの名無しさん
17/06/27 16:42:32.21 mpuQzI8/.net
フレームワークだけどngx
799:デフォルトの名無しさん
17/06/27 18:35:39.52 5NUjqPYf.net
Dartどっかいったな
800:デフォルトの名無しさん
17/06/27 19:04:32.75 mpuQzI8/.net
googleが作る言語はゴミばっかだからしゃーない
言語のセンスは圧倒的にMSの方が上
MSというよりヘルスバーグが有能すぎる
801:デフォルトの名無しさん
17/06/27 22:13:14.24 xkXC4vKS.net
>>767
goはいいぞ。素朴でモダンという相反する要素を持ち合わせてる。
エコシステムはモダン。
言語仕様は素朴。
802:デフォルトの名無しさん
17/06/27 22:20:02.75 rQeMEWtY.net
J++とかJ#とかManaged C++とか割と救いようのないものも作ってるけどねMicrosoft
でも全体としては確かに良い言語が多い印象
Googleの言語もGoとか(使ったことないけど)人気みたいだし, そもそも作った言語の数が大分違う気が
803:デフォルトの名無しさん
17/06/27 23:37:36.64 mpuQzI8/.net
>>768
ジェネリクス追加されるまでは様子見…
804:デフォルトの名無しさん
17/06/28 03:33:15.38 4SuBLGV6.net
マイクロソフトはvsc出したときはなんでatomの二番煎じやってんのって思ったけどやはり製品としての完成度高くて感動する。
開発環境作らせたら最強と言う噂は伊達じゃない。
805:デフォルトの名無しさん
17/06/28 09:12:54.31 9HmGLvwZ.net
>>764
angular2
806:デフォルトの名無しさん
17/06/28 14:22:19.39 R0ZTQr0d.net
Announcing TypeScript 2.4
URLリンク(blogs.msdn.microsoft.com)
807:デフォルトの名無しさん
17/06/28 16:15:00.25 7uiFkJf0.net
MSは言語と開発環境では最強
ネットや機械学習ならGoogle
アップルは…嫌い
808:デフォルトの名無しさん
17/06/28 16:19:23.04 DxMay05+.net
MSは言語と開発環境では最強
ネットや機械学習ならGoogle
アップルは…嫌い
809:デフォルトの名無しさん
17/06/28 16:28:12.57 7uiFkJf0.net
>>775
何こいつ怖い
810:デフォルトの名無しさん
17/06/29 16:13:29.70 f9ij8X2q.net
すいません。
例えば以下のようにアクションを定義してあったとして
export type Action =
{
type: 'FETCH_MAIN_FEEDS';
} |
{
type: 'SET_MAIN_FFEDS';
payload: comm.Contentlist;
} |
{
type: 'DO_NOTHING'
};
ジェスリクスの仕組みを使って
type ActionType = 'FETCH_MAIN_FEEDS' | 'SET_MAIN_FFEDS' | 'DO_NOTHING'
をActionの内容変更に合わせて自動的に作る方法ってないですかね
811:デフォルトの名無しさん
17/06/29 16:20:59.60 f9ij8X2q.net
自己解決
export type Action =
{
type: 'FETCH_MAIN_FEEDS';
payload: undefined;
} |
{
type: 'SET_MAIN_FFEDS';
payload: comm.Contentlist;
} |
{
type: 'DO_NOTHING';
payload: undefined;
};
type ActionType = Action['type'];
type PayloadType = Action['payload'];
思いの外簡単であった
812:デフォルトの名無しさん
17/07/10 13:26:30.50 gqDySAuG.net
typescriptのエラーってよくわかんないことある
(81,32): error TS2322: Type '{ path: "/logout"; component: typeof Logout; }' is not assignable to type 'IntrinsicAttributes & IntrinsicClassAttributes<Route> & Readonly<{ children?: ReactNode; }> & Rea...'.
Type '{ path: "/logout"; component: typeof Logout; }' is not assignable to type 'Readonly<RouteProps>'.
Types of property 'component' are incompatible.
Type 'typeof Logout' is not assignable to type 'StatelessComponent<RouteComponentProps<any> | undefined> | ComponentClass<RouteComponentProps<any...'.
Type 'typeof Logout' is not assignable to type 'ComponentClass<RouteComponentProps<any> | undefined>'.
ってでて、何のことかわからない。
偶然解決して、総合するとReact.Componet<P,S>のSをvoidに指定は駄目ってことらしい。
上記エラーメッセージからどう読み取ればそういうことなわけ?
813:デフォルトの名無しさん
17/07/10 19:20:13.57 lPQJaLkK.net
template登場したての頃のc++みたいだな
814:デフォルトの名無しさん
17/07/12 20:52:57.67 iKt9vtZC.net
@typesやパッケージ自身が持っているd.tsに問題があるとき、自分のプロジェクト内で
部分的に修正版と差し替えたりできないのかな?
Typescript2.4に上げたらいくつかのパッケージがエラーを出すようになってしまったんで
大元が対応するまでの間ちょっと回避したいんだが。
815:デフォルトの名無しさん
17/07/12 21:44:01.43 46U9BX05.net
>>781
URLリンク(teratail.com)
816:デフォルトの名無しさん
17/07/12 22:50:59.04 iKt9vtZC.net
リンク先のそれは解決法として正しいのかという疑問はあるがとりあえず、declareで
定義を上書きできるということかな。試してみるわ。ありがとう。
817:デフォルトの名無しさん
17/07/13 12:11:08.28 SeGC5rTL.net
ここでredux-observale薦めてもらったのもあって試してるんだけど
epicを書く時 action$.ofType('FIRST’)って書いてfilterするのはいいんだけど返ってくる
Observaleがtype:’FIRST’に絞り込められてくれない。
無理やりキャストして使えってこと?
いい方法教えてください
818:デフォルトの名無しさん
17/07/14 00:10:59.94 UTvPeefr.net
VS2017は2015と違ってJavaScriptで
var a = {};
a.b = 1;
と書いてその下に「a.」と入力しても候補にnumber型プロパティとしてのbはない
TypeScriptのnamespaceがブラウザの生JavaScriptでも使えるようになったら便利そうなんだけどな
819:デフォルトの名無しさん
17/07/14 15:42:06.74 AYnLv9ir.net
>>783
いやいや。具体的に指摘してほしいな。
reduxのactionは基本的にobjectであれば何でもあり。というスタンスのもの�
820:ナ そのactionに継承関係を設定してるのはたまたま定義ファイルの作者がなんとなく決めた程度のものでしかない。 となると元々の定義を修正してしまっても不都合はないと思うんだが。 更にいうとreduxのmiddlewareの定義ファイルも、結構declareで大元のreudxの定義を改変してる。 (redux-thunkとかredux-promiseとか)
821:デフォルトの名無しさん
17/07/14 22:07:24.48 Ukk3qL4L.net
「具体的に」と言っている当人が具体的にに何を指摘しているのかわからない件
822:デフォルトの名無しさん
17/07/17 02:22:25.78 HJdOjxBV.net
モジュール拡張書いてる人っていますか?
ローカルではうまく書けるんだけど、
npmで管理して外部モジュール化しようとするとうまく動かなく�
823:ネる。 jsとd.tsに別れるとだめなんだろうか、、、、。 なんか参考になるnpmライブラリが有るなら事に教えてくださいm(_ _)m
824:デフォルトの名無しさん
17/07/17 09:24:35.44 3rVoB3WX.net
>>788
jsとd.tsを同じ所に置けばおk
angularとか参考になるよ
825:デフォルトの名無しさん
17/07/17 12:07:57.24 HJdOjxBV.net
>>789
ありがとうざいます。js とd.tsは同じ場所においてます、、、、
ちょっとangularはわからなかったのですが
rxjs5はoperatorをモジュール拡張の仕組みを使っているので参考になりました。
それを元に書いてるんですが、、、
どうしてもうまくいかないです。
826:デフォルトの名無しさん
17/07/17 12:30:35.11 3rVoB3WX.net
>>790
npm rxjsした時のフォルダ構成とビルド結果が同じようにすればおk
もちろんパッケージ.jspnとかもな
827:デフォルトの名無しさん
17/07/20 13:43:30.16 9ngnJ+y5.net
typescriptってユーザー数多そうなのに
どこに生息してるん?
teratailもあんまりいなさそうだし。slackとかかね?
おせーてください
828:デフォルトの名無しさん
17/07/20 15:04:36.06 heFqzBlt.net
typescript は google 社員御用達だぞ
ここのレスも 99 割が google 社員のもの
829:デフォルトの名無しさん
17/07/20 15:14:04.11 9ngnJ+y5.net
MSとgoogleのマリアージュとか最高じゃないかな。
830:デフォルトの名無しさん
17/07/20 17:31:24.01.net
>>792
TypeScriptはほぼJSだから他の言語と違って特に質問するような事ないし…
831:デフォルトの名無しさん
17/07/20 20:56:24.88.net
>>795
定義ファイル周りとか結構悩むことない?
例えばreduxとかそのまま使うとTypeScriptの補完機能を活かしきれなくて
typescript-fsaとかを使って補強してやると凄く調子良く動く。
832:デフォルトの名無しさん
17/07/28 10:18:51.65 O7VztC89.net
URLリンク(jp.vuejs.org)
vuejsもtypescriptとの親和性上がってるのかな。
昔はいまいちだったんだけど
833:デフォルトの名無しさん
17/07/28 21:08:46.09 O7VztC89.net
typescriptでjest使ってる人っています?
行番号がめちゃくちゃになっちゃうんですが、どうすればいいんですかね?
inlinesoucrmap: trueにセットしても改善せず。
行番号以外は上手く動いてるんですけどね。
834:デフォルトの名無しさん
17/07/30 23:55:24.33 W7NHR4pI.net
es2015とかes2017はどうかな?
async await使えるの幸せ。
835:デフォルトの名無しさん
17/08/03 14:06:03.33 GUb8aQei.net
さすが俺達のTypeScript
TypeScripts Type System is Turing Complete
URLリンク(github.com)
836:デフォルトの名無しさん
17/08/03 19:19:00.00 WxFDmNeE.net
>>800
ジェネリグスだけでプログラミングできるってこと?
わけわかめ
837:デフォルトの名無しさん
17/08/04 00:27:45.60 LmyTNXHn.net
ようやくHTML+CSSに追いついたわけだな
URLリンク(cpplover.blogspot.com)
838:デフォルトの名無しさん
17/08/12 11:10:59.59 3DdLvbHE.net
tsconfig.json で noImplicitAny をtrueにしてみたら、npmからのモジュールをimportしている部分で
こういうエラーが大量に出るようになってしまった。
error TS7016: Could not find a declaration file for module 'モジュール名'.
importをrequireに戻したら逆に不便だし、自分で .d.ts を用意するには数が多すぎて追いつかない。
noImplicitAny の対象を自分のコードのみに限定する(node_modules以下を対象外とする)
なんてことはできないんだろうか。
839:デフォルトの名無しさん
17/08/12 11:34:41.06 DE4QKP9/.net
>>803
俺は普通に使えてるけどな。tsconfig全体を貼ってみたら?
840:デフォルトの名無しさん
17/08/12 11:38:02.30 DE4QKP9/.net
あと使ってるライブラリも。ライブラリによって違うのかな?
俺はreduxとかreactとかm
841:oment.jsとかimmutable.jsとか色々入れてるけど 特にそういう不具合が起きたことはないな。 多分デフォルトでtsconfigの中身はnode_modules対象外な気がする。 一応聞くけどwebpack使ってないよね?
842:デフォルトの名無しさん
17/08/12 11:51:37.20 3DdLvbHE.net
このへんのモジュールが引っ掛かった。全部じゃないけど。
react-spin
cookie-parser
uuid-parse
>一応聞くけどwebpack使ってないよね?
そう、webpack使ってる。
module: {
rules: [
{
exclude: /(node_modules)/,
test: /\.[jt]s$/,
use: [ { loader: 'ts-loader', options: { configFileName: "tsconfig.json", } } ]
}
]
},
tsconfig.json はこんな感じ。
{
"compilerOptions": {
"module": "commonjs",
"target": "es6", "allowJs": true, "strictNullChecks": false,
"noImplicitAny": false, "noImplicitThis": true, "noImplicitReturns": true, "sourceMap": true
},
"exclude": [ "node_modules" ]
}
excludeの設定を間違えているのかな?
843:デフォルトの名無しさん
17/08/12 15:39:16.07 DE4QKP9/.net
なんだ、全部のd.tsが見つからないって言ってるわけじゃないなら、node_modules関係なくない?
足りないd.tsファイルは自作するしかないでしょ。インストールしたのに見つからないなら問題だけど
844:デフォルトの名無しさん
17/08/12 15:56:35.18 DE4QKP9/.net
webpackのresolveが抜けてるんじゃない?
resolve: {
extensions: ['.ts', '.tsx', '.js', '.jsx'],
modules: [
"node_modules/"
]
},
845:デフォルトの名無しさん
17/08/12 16:09:16.06 DE4QKP9/.net
>react-spin
あとreact-spinは型定義にないみたいね。でもこれくらいなら五分で自作できるから大丈夫。
846:デフォルトの名無しさん
17/08/12 18:30:45.13 3DdLvbHE.net
>>807
noImplicitAny = false なら .d.ts が無くても使えていたんで何か方法はないかと思ったけど、
無いならしょうがないね。ありがとう。
847:デフォルトの名無しさん
17/08/12 19:23:03.92 DE4QKP9/.net
>>810
いやいや。簡単だから諦めないでよ。特にreact-componentなら簡単に自作できる
URLリンク(github.com)
これとか参考になると思う
848:デフォルトの名無しさん
17/08/12 19:49:53.59 3DdLvbHE.net
最初に書いたとおり、単に数が多いからやってられんてだけ。
849:デフォルトの名無しさん
17/08/12 19:58:06.64 DE4QKP9/.net
>>812
あーなるほど失礼
もともとjs案件だったってこと?
850:デフォルトの名無しさん
17/08/13 21:25:13.43 LJmg41iW.net
(new Error()).stack みたく 実行箇所のtsファイル名と行番号を取得する方法ってないですかね。
プリプロセッサみたくコンパイルする過程でファイル名と行番号に変換するような定数があればいいんですけど
851:デフォルトの名無しさん
17/08/15 09:46:45.08 yLrj+bDi.net
o : any が"x"というメンバーを持っているか調べるのは if ("x" in o) でできるけど、
o.x の型がstringかどうか調べようと if (typeof o["x"] === "string") とやるとESlintの
no-string-literalに引っかかってしまう。
このルールを無効にする以外にメンバーの型をチェックする方法ってないですかね?
852:デフォルトの名無しさん
17/08/15 14:18:14.33 tN8D0FqC.net
>>815
無理 any型を使ってる時点でtsにできることは無い
853:デフォルトの名無しさん
17/08/15 14:30:58.84 Yyv6Foyi.net
>>815
一旦変数に入れてからアクセスすればいいんじゃない
const x = "x";
if (typeof o[x] === "string") { ...
854:デフォルトの名無しさん
17/08/15 15:31:46.37 yLrj+bDi.net
>>817
なるほど、そんな方法が。うまくいったみたい。ありがとう。
使う直前で変数に入れるならdisableにするのとさほど変わらないけど、メンバー名はどこかで
一元管理しておけってことかな。
855:デフォルトの名無しさん
17/08/15 17:11:17.08 tN8D0FqC.net
>>818
単に変数oにinterface定義してあげればいい�
856:セけでは。 そもそもtslintじゃなくてeslint使っているという状況もよくわからない
857:デフォルトの名無しさん
17/08/15 17:54:36.31 yLrj+bDi.net
あぁ、eslintって書いたのはtslintの間違い。
>単に変数oにinterface定義してあげればいいだけでは。
ネットワークやファイル経由のjsonとか、型情報が落とされたオブジェクトからの復元なんで。
858:デフォルトの名無しさん
17/08/15 23:34:39.69 Yyv6Foyi.net
>>819
いや静的型チェックと実行時型チェックをごっちゃにしちゃダメでしょ
TypeScriptは静的型チェックを提供するものなんだから実行時型チェックにinterfaceなんて持ち出す道理がない
859:デフォルトの名無しさん
17/08/17 11:02:47.05 wX4L2Jep.net
>>821
そうだったね。ごめん
860:デフォルトの名無しさん
17/08/22 22:13:44.37 /ptFhj0b.net
TSの環境の開発の旗振りって誰?
いつになったら開発環境が安定するの?
webの情報のほとんどが古くて使えない
861:デフォルトの名無しさん
17/08/22 22:37:14.07 1PU0SC+v.net
まずVSCodeをインストール
npmでts2.xをインストール
型定義は@types/xxxxxxx
862:デフォルトの名無しさん
17/08/23 13:19:39.56 12Hdps1J.net
msで作ってるから、まずはmsの開発環境試してみればいいんだろうけど、
大元の実装が不安定だったりするの?
URLリンク(github.com)
863:デフォルトの名無しさん
17/08/23 13:23:34.59 YtvD4LeH.net
TypeScriptの実装じゃなくて環境の方だろ?
型定義ファイルもTypingsとか@typesとかいろいろ変遷してきたし
864:デフォルトの名無しさん
17/08/23 19:59:00.18 KTb6BBkr.net
TypeScript1.0が出たころ何冊も本が書かれたけど、その後どんどん進化するから誰も手を出さなくなったな。
865:デフォルトの名無しさん
17/08/23 20:36:30.14 CbozNT9/.net
進化に関係なく使う人が居て需要があれば本は出される
出されないってことは・・そういうことだ
866:デフォルトの名無しさん
17/08/25 02:06:21.27 +9ilYHDI.net
ジェネリクスで教えてほしいことがあるんですが
型がundefinedかそうでないかで処理分岐をしたいんですがどうすればいいでしょうか
URLリンク(goo.gl)
上記のようなコードはジェネリクスだとPはコンパイル時に解決されるものだからダメですよね。
じゃあどうすればいいんでしょうか。
もちろん引数にpayload:P みたいなのがあればtypeGaurdが使えるんですけど、それがない場合は?
867:デフォルトの名無しさん
17/08/25 07:45:31.16 HjHZR7Zb.net
試してないけど、Pのローカル変数を置いてみるのは?
初期化できないとダメかな。
868:デフォルトの名無しさん
17/08/25 09:42:23.66 WV+v2bcZ.net
コンパイル時に型自体の比較が出来ればいいんだけどねぇ
869:デフォルトの名無しさん
17/08/25 12:42:23.60 ai11peC4.net
型がundefinedって言うのは違うのでは?
変数がundefinedならわかるけど考え方の次元が違う気がする
Add<undefined>(item);ってありえないだろ
870:デフォルトの名無しさん
17/08/25 18:31:01.83 uvmzLTaY.net
undefinedの型はundefinedだよ
871:デフォルトの名無しさん
17/08/25 21:39:57.29 +9ilYHDI.net
>>832
undefined型、null型あります
872:デフォルトの名無しさん
17/08/26 04:59:29.39 FZcG7krL.net
undefined null void never 使い分け出来てる?
873:デフォルトの名無しさん
17/08/27 13:34:52.17 0P4eY3kj.net
>>830
だめでしたわ。やはり最終的に生成されるjsコードが型がないからなにもないところに型を定義するのは無理っぽい
ジェネリクスって使う側には幸せだけどライブラリを作ろうって思うとなかなか難しいす。
実は以下のコードが小さくて見やすいので改造できないか試しているんです。
URLリンク(github.com)
store.dispatch(someAction()) というように同期型のアクションを作るときはパラメータ引数無しで使えるんだけど
非同期アクションを使おうとした場合はパラメータ引数なしの表現ができないんですよ。
store.dispatch(someAsyncAction.started
874:(undefined)) と書かなきゃけない。 ここのundefinedを省略する方法を探っていたんですよね。
875:デフォルトの名無しさん
17/08/27 13:49:39.35 0iS30aa2.net
そもそも何がしたいのかわからないんだけど
引数追加したいけないのか?
876:デフォルトの名無しさん
17/08/27 13:55:46.03 0iS30aa2.net
レス見てなかった
ごめんごめん
877:デフォルトの名無しさん
17/08/27 14:17:00.38 iBnNI7N6.net
引数にPが含まれていない以上呼び出し時の型パラメータはハードコーディングしなきゃならんわけで、
それならOnlyH用の関数と分けてしまっても大して変わらんだろう。処理自体は共通化すればいいし。
878:デフォルトの名無しさん
17/08/27 14:23:58.62 0iS30aa2.net
ところで本当にこれジェネリックの問題?
879:デフォルトの名無しさん
17/08/27 14:27:48.95 wLayuApT.net
C++でならテンプレートの特殊化で書けるし書きたい気持ちはよく分かる
880:デフォルトの名無しさん
17/08/27 17:42:23.47 0P4eY3kj.net
>>839
もちろんそれならできることは確認してますが、それだったら引数にundefined
許容したほうがいいかなーと。
ジェネリクスは知らないことが色々ありそうなんでもしかしたら解決方法があればと想ったんですが、、、、
typescriptの進化を待ちます、、、。
>>841
c++だとできるんですか。
どう書くのか知りたいです