ECMAScript で特別な意味を持つインターフェース
ArrayLike
Array.from などで Array に変換できる。ちなみに ES2015 以前は代わりに Array.prototype.slice などを使って変換していた。
code: (ts)
interface ArrayLike<T> {
readonly length: number;
}
Iterable, AsyncIterable
Iterable は for-of やスプレッド構文などで、AsyncIterable は for-await-of で使われる。
code: (ts)
interface Iterable<T> {
}
interface AsyncIterable<T> {
}
interface Iterator<T, TReturn = any, TNext = undefined> {
next(value: TNext): IteratorResult<T, TReturn>;
return?(value?: TReturn): IteratorResult<T, TReturn>;
throw?(e?: any): IteratorResult<T, TReturn>;
}
interface AsyncIterator<T, TReturn = any, TNext = undefined> {
next(value: TNext): Promise<IteratorResult<T, TReturn>>;
return?(value?: TReturn): Promise<IteratorResult<T, TReturn>>;
throw?(e?: any): Promise<IteratorResult<T, TReturn>>;
}
type IteratorResult<T, TReturn = any> = IteratorYieldResult<T> | IteratorReturnResult<TReturn>;
interface IteratorYieldResult<TYield> {
done?: false;
value: TYield;
}
interface IteratorReturnResult<TReturn> {
done: true;
value: TReturn;
}
Thenable (PromiseLike)
await が使えて、Promise.resolve で Promise に変換できる。モジュールで then メソッドをエクスポートした場合に度々問題になる。
code: (ts)
interface PromiseLike<T> {
then<TResult1 = T, TResult2 = never>(onfulfilled?: ((value: T) => TResult1 | PromiseLike<TResult1>) | undefined | null, onrejected?: ((reason: any) => TResult2 | PromiseLike<TResult2>) | undefined | null): PromiseLike<TResult1 | TResult2>;
}
JSONSerializable
ToJSON メソッドを持つ。JSON.stringify で使われる。
code: (ts)
interface JSONSerializable {
toJSON(key: string): JSONValue;
}
type JSONValue =
| null
| boolean
| string
| number
| JSONValue[];
Serializable
構造化複製アルゴリズムで使われる。どちらかといえば HTML Standard の定義だが、ECMAScript に一部仕様が移りそうなのでここにも書いておく。なお Web 標準の Platform Object については省略。 code: (ts)
type NativeError =
| EvalError
| RangeError
| ReferenceError
| SyntaxError
| TypeError
| URIError;
type Serializable =
| undefined
| null
| string
| number
| bigint
| String
| Number
| BigInt
| Date
| RegExp
| ArrayBufferLike
| ArrayBufferView
| Error
| NativeError
| AggregateError // 仕様ではまだ未対応
| Serializable[]
| Map<Serializable, Serializable>
| Set<Serializable>;