TypeScript Deep Dive 日本語版
検索…
TypeScript Deep Dive 日本語版
TypeScript Deep Dive 日本語版
TypeScript入門 & 環境構築
JavaScript
モダンなJavaScriptの機能
プロジェクトの環境設定
Node.js & TypeScriptのプロジェクト作成
React & TypeScriptのプロジェクト作成
TypeScriptの型システム
JSX
オプション
TypeScriptのエラー
NPM
テスト
ツール
その他のヒント
String Based Enums
Nominal Typing
Stateful Functions
Bind is Bad
Currying
Type Instantiation
Lazy Object Literal Initialization
Classes are Useful
Avoid Export Default
Limit Property Setters
outFile caution
JQuery tips
static constructors
singleton pattern
Function parameters
Build Toggles
Barrel
Create Arrays
Typesafe Event Emitter
スタイルガイド(コーディング規約)
TypeScriptコンパイラの内側
GitBook
上で動作しています
Type Instantiation
たとえば、ジェネリックパラメータを持つものがあるとします。クラス
Foo
です:
class
Foo
<
T
>
{
foo
:
T
;
}
特定の型の特殊バージョンを作成したいとします。このパターンは、項目を新しい変数にコピーし、ジェネリックを具体的な型に置き換えた型アノテーションを与えることです。例えば。
Foo<number>
クラスが必要な場合です:
class
Foo
<
T
>
{
foo
:
T
;
}
let
FooNumber
=
Foo
as
{
new
()
:
Foo
<
number
>
};
// ref 1
ref 1
では、
FooNumber
は
Foo
と同じですが、
new
演算子で呼び出されたときに
Foo<Number>
のインスタンスを与えるものとして扱います。
継承
型アサーションパターンは、あなたが正しいことをする、と信じているという意味では安全ではありません。クラスの他の言語での共通パターンは継承を使うことです:
class
FooNumber
extends
Foo
<
number
>
{}
ここで注意しなければならないのは、デコレータをベースクラスで使用すると、継承されたクラスはベースクラスと同じ動作をしない可能性があることです(それは、もはやデコレータでラップされません)。
もちろん、クラスを特殊化していない場合でも、型強制/アサーションパターンがワークする方法を考える必要があります。なので、まず一般的なアサーションパターンを示します。
function
id
<
T
>
(
x
:
T
)
{
return
x
;
}
const
idNum
=
id
as
{(
x
:
number
)
:
number
};
この
stackoverflowの質問
にインスパイアされました
前
Currying
次
Lazy Object Literal Initialization
最終更新
2yr ago
リンクのコピー