[TypeScript] 2.2¶
TypeScript2.2のリリース内容まとめ
Support for Mix-in classes¶
NOT NECESSARY NORMAL
ES2015のMixin class patternをサポートするようになった。
TypeScriptは多重継承1できないため、そのようなケースで利用できる。
Mixin constructor type¶
型X
に対するnew (...args: any[]) => X
のこと。
Mixin class¶
以下の条件を満たすクラスのこと。
- 型パラメータが
Constructor
(Constructor<AnyClass>
) を継承している - コンストラクタの引数が
(...args: any[])
かつスーパークラスへの受け渡しがsuper(...args)
具体例。
type Constructor<T = {}> = new (...args: any[]) => T;
// すべてのクラスに適応可能なMixin
function Debuggable<C extends Constructor>(BaseClass: C) {
return class extends BaseClass {
canDebug = true;
};
}
// Humanのシグニチャを持つクラスのみに適応可能なMixin
function Ohagozable<C extends Constructor<Human>>(BaseClass: C) {
return class extends BaseClass {
ohagoza(message: string) {
console.log(`${this.name}: ohagoza! ${message}`);
}
};
}
class Human {
constructor(public name: string) {}
}
// Mixin適応
const OhagozaHuman = Debuggable(Ohagozable(Human));
// Mixin適応クラスのインスタンス作成
const take = new OhagozaHuman("Take100");
take.ohagoza(`My tag is ${take.canDebug}`);
// -> Take100: ohagoza! My tag is true
object type¶
NOT NECESSARY EASY
primitiveでない型として、(obj: object)
のようなobject型が追加された。
以下のいずれでもないような型。
- number
- string
- boolean
- symbol
- null
- undefined
Support for new.target¶
UNKNOWN CAN NOT UNDERSTAND
ES2015のnew.target
に対応した。
new.target
について、仕様と使い所を理解できていない。。
Better checking for null/undefined in operands of expressions¶
NOT NECESSARY EASY
式のオペランドに対するnull/undefined
に対するチェックが改善した。
演算子 | エラーになる条件 |
---|---|
+ |
どちらかのオペランドがNullable かつ string or any 型ではない |
- * ** / % ^ |
どちらかのオペランドがNullable |
<< >> >>> & ┃ |
どちらかのオペランドがNullable |
< > <= >= in |
どちらかのオペランドがNullable |
instanceof |
右オペランドがNullable |
単項演算子 (+ - ~ ++ -- ) |
オペランドがNullable |
--strictNullChecks
が無効の場合は実質使えない。
var: string | undefined
のような表現ができないため。
Dotted property for types with string index signatures¶
SHOULD EASY
string型のindexに限り、ドットアクセスができるようになった。
const hoge = {
key: "value"
}
hoge.key
const hoge = {
2: "value"
}
// string型以外のindexにはドットアクセスできない
hoge.2
Support for spread operator on JSX element children¶
HAD BETTER EASY
JSXの子要素としてspread operatorが使えるようになった。
詳細は facebook/jsx/issues/57 を参照。
New jsx: react-native¶
HAD BETTER EASY
--jsx
オプションの値にreact-native
が追加された。
指定すると、JSXの有無にかかわらず.js
ファイルに変換する。 (.jsx
ファイルにはしない)
-
class A extends B, C
のようなパターンを多重継承という ↩