Merge pull request #6445 from tkqubo/lodash-is-x

lodash: add type guards for _.isXxx functions
This commit is contained in:
Masahiro Wakame
2015-11-02 22:25:19 +09:00
2 changed files with 104 additions and 11 deletions
+93
View File
@@ -2752,24 +2752,68 @@ result = <boolean>_.isArguments(any);
result = <boolean>_(1).isArguments();
result = <boolean>_<any>([]).isArguments();
result = <boolean>_({}).isArguments();
{
let value: IArguments|number = 42;
if (_.isArguments(value)) {
let length: number = value.length;
// compile error
// let i: number = value + 1;
} else {
let i: number = value + 1;
// compile error
// let length: number = value.length;
}
}
// _.isArray
result = <boolean>_.isArray(any);
result = <boolean>_(1).isArray();
result = <boolean>_<any>([]).isArray();
result = <boolean>_({}).isArray();
{
let value: number[]|string = [1, 3, 5];
if (_.isArray(value)) {
let length: number[] = value.concat(4);
// compile error
// let char: string = value.charAt(0);
} else {
let char: string = value.charAt(0);
// compile error
// let length: number[] = value.concat(4);
}
}
// _.isBoolean
result = <boolean>_.isBoolean(any);
result = <boolean>_(1).isBoolean();
result = <boolean>_<any>([]).isBoolean();
result = <boolean>_({}).isBoolean();
{
let value: number[]|boolean = [1, 3, 5];
if (_.isBoolean(value)) {
let b: boolean = value;
// compile error
// let length: number = value.length;
} else {
let length: number = value.length;
// compile error
// let b: boolean = value;
}
}
// _.isDate
result = <boolean>_.isDate(any);
result = <boolean>_(42).isDate();
result = <boolean>_<any>([]).isDate();
result = <boolean>_({}).isDate();
{
let value: Date|string = "foo";
if (_.isDate(value)) {
value.toTimeString();
} else {
value.charAt(0);
}
}
// _.isElement
result = <boolean>_.isElement(any);
@@ -2804,6 +2848,14 @@ result = <boolean>_.isError(any);
result = <boolean>_(1).isError();
result = <boolean>_<any>([]).isError();
result = <boolean>_({}).isError();
{
let value: Error|string = "error";
if (_.isError(value)) {
let message: string = value.message;
} else {
let message: string = value;
}
}
// _.isFinite
result = <boolean>_.isFinite(any);
@@ -2816,6 +2868,14 @@ result = <boolean>_.isFunction(any);
result = <boolean>_(1).isFunction();
result = <boolean>_<any>([]).isFunction();
result = <boolean>_({}).isFunction();
{
let value: Function|string = "foo";
if (_.isFunction(value)) {
value();
} else {
let result: string = value;
}
}
// _.isMatch
var testIsMatchCustiomizerFn: (value: any, other: any, indexOrKey: number|string) => boolean;
@@ -2837,6 +2897,14 @@ result = <boolean>_(undefined).isNaN();
// _.isNative
result = <boolean>_.isNative(Array.prototype.push);
result = <boolean>_(Array.prototype.push).isNative();
{
let value: Function|string = "foo";
if (_.isNative(value)) {
value();
} else {
let result: string = value;
}
}
// _.isNull
result = <boolean>_.isNull(any);
@@ -2849,6 +2917,14 @@ result = <boolean>_.isNumber(any);
result = <boolean>_(1).isNumber();
result = <boolean>_<any>([]).isNumber();
result = <boolean>_({}).isNumber();
{
let value: number|string = "foo";
if (_.isNumber(value)) {
let result: number = value * 42;
} else {
let result: string = value;
}
}
// _.isObject
result = <boolean>_.isObject(any);
@@ -2867,12 +2943,29 @@ result = <boolean>_.isRegExp(any);
result = <boolean>_(1).isRegExp();
result = <boolean>_<any>([]).isRegExp();
result = <boolean>_({}).isRegExp();
{
let value: RegExp|string = /^foo$/g;
if (_.isRegExp(value)) {
let regex: RegExp = value;
let index: number = value.exec("foo").index;
} else {
let result: string = value;
}
}
// _.isString
result = <boolean>_.isString(any);
result = <boolean>_(1).isString();
result = <boolean>_<any>([]).isString();
result = <boolean>_({}).isString();
{
let value: string|number = "foo";
if (_.isString(value)) {
let result: string = value;
} else {
let result: number = value * 42;
}
}
// _.isTypedArray
result = <boolean>_.isTypedArray([]);
+11 -11
View File
@@ -6799,7 +6799,7 @@ declare module _ {
* @param value The value to check.
* @return Returns true if value is correctly classified, else false.
*/
isArguments(value?: any): boolean;
isArguments(value?: any): value is IArguments;
}
interface LoDashImplicitWrapperBase<T, TWrapper> {
@@ -6816,7 +6816,7 @@ declare module _ {
* @param value The value to check.
* @return Returns true if value is correctly classified, else false.
**/
isArray(value?: any): boolean;
isArray(value?: any): value is any[];
}
interface LoDashImplicitWrapperBase<T,TWrapper> {
@@ -6833,7 +6833,7 @@ declare module _ {
* @param value The value to check.
* @return Returns true if value is correctly classified, else false.
**/
isBoolean(value?: any): boolean;
isBoolean(value?: any): value is boolean;
}
interface LoDashImplicitWrapperBase<T, TWrapper> {
@@ -6850,7 +6850,7 @@ declare module _ {
* @param value The value to check.
* @return Returns true if value is correctly classified, else false.
**/
isDate(value?: any): boolean;
isDate(value?: any): value is Date;
}
interface LoDashImplicitWrapperBase<T, TWrapper> {
@@ -6946,7 +6946,7 @@ declare module _ {
* @param value The value to check.
* @return Returns true if value is an error object, else false.
*/
isError(value: any): boolean;
isError(value: any): value is Error;
}
interface LoDashImplicitWrapperBase<T, TWrapper> {
@@ -6964,7 +6964,7 @@ declare module _ {
* @param value The value to check.
* @return Returns true if value is a finite number, else false.
**/
isFinite(value?: any): boolean;
isFinite(value?: any): value is number;
}
interface LoDashImplicitWrapperBase<T, TWrapper> {
@@ -6981,7 +6981,7 @@ declare module _ {
* @param value The value to check.
* @return Returns true if value is correctly classified, else false.
**/
isFunction(value?: any): boolean;
isFunction(value?: any): value is Function;
}
interface LoDashImplicitWrapperBase<T, TWrapper> {
@@ -7043,7 +7043,7 @@ declare module _ {
* @param value The value to check.
* @retrun Returns true if value is a native function, else false.
*/
isNative(value: any): boolean;
isNative(value: any): value is Function;
}
interface LoDashImplicitWrapperBase<T, TWrapper> {
@@ -7078,7 +7078,7 @@ declare module _ {
* @param value The value to check.
* @return Returns true if value is correctly classified, else false.
*/
isNumber(value?: any): boolean;
isNumber(value?: any): value is number;
}
interface LoDashImplicitWrapperBase<T, TWrapper> {
@@ -7134,7 +7134,7 @@ declare module _ {
* @param value The value to check.
* @return Returns true if value is correctly classified, else false.
*/
isRegExp(value?: any): boolean;
isRegExp(value?: any): value is RegExp;
}
interface LoDashImplicitWrapperBase<T, TWrapper> {
@@ -7151,7 +7151,7 @@ declare module _ {
* @param value The value to check.
* @return Returns true if value is correctly classified, else false.
**/
isString(value?: any): boolean;
isString(value?: any): value is string;
}
interface LoDashImplicitWrapperBase<T, TWrapper> {