[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のようなパターンを多重継承という ↩