Add isArrayLike builtin (#453)

This commit is contained in:
Max Graey
2019-02-27 22:47:52 +02:00
committed by Daniel Wirtz
parent e8b0767143
commit aad263e670
8 changed files with 327 additions and 212 deletions

View File

@ -106,6 +106,8 @@ declare function isReference(value: any): value is object | string;
declare function isString(value: any): value is string | String;
/** Tests if the specified value can be used as an array. */
declare function isArray(value: any): value is Array<any>;
/** Tests if the specified type *or* expression can be used as an array like object. Compiles to a constant. */
declare function isArrayLike(value: any): value is ArrayLike<any>;
/** Tests if the specified expression resolves to a defined element. */
declare function isDefined(expression: any): bool;
/** Tests if the specified expression evaluates to a constant value. */
@ -411,6 +413,11 @@ declare class Int32Array extends Array<i32> {}
declare class Float32Array extends Array<f32> {}
declare class Float64Array extends Array<f64> {}
interface ArrayLike<T> {
length: i32;
[key: number]: T;
}
/** Interface for a typed view on an array buffer. */
interface ArrayBufferView<T> {
[key: number]: T;

View File

@ -215,6 +215,13 @@ globalScope["isString"] = function isString(arg) {
};
globalScope["isArray"] = Array.isArray;
globalScope["isArrayLike"] = function isArrayLike(expr) {
return expr
&& typeof expr === 'object'
&& typeof expr.length === 'number'
&& expr.length >= 0
&& Math.trunc(expr.length) === expr.length;
}
globalScope["isDefined"] = function isDefined(expr) {
return typeof expr !== "undefined";