diff --git a/lodash/lodash-tests.ts b/lodash/lodash-tests.ts index 249bbd21f..2edab368b 100644 --- a/lodash/lodash-tests.ts +++ b/lodash/lodash-tests.ts @@ -2752,24 +2752,68 @@ result = _.isArguments(any); result = _(1).isArguments(); result = _([]).isArguments(); result = _({}).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 = _.isArray(any); result = _(1).isArray(); result = _([]).isArray(); result = _({}).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 = _.isBoolean(any); result = _(1).isBoolean(); result = _([]).isBoolean(); result = _({}).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 = _.isDate(any); result = _(42).isDate(); result = _([]).isDate(); result = _({}).isDate(); +{ + let value: Date|string = "foo"; + if (_.isDate(value)) { + value.toTimeString(); + } else { + value.charAt(0); + } +} // _.isElement result = _.isElement(any); @@ -2804,6 +2848,14 @@ result = _.isError(any); result = _(1).isError(); result = _([]).isError(); result = _({}).isError(); +{ + let value: Error|string = "error"; + if (_.isError(value)) { + let message: string = value.message; + } else { + let message: string = value; + } +} // _.isFinite result = _.isFinite(any); @@ -2816,6 +2868,14 @@ result = _.isFunction(any); result = _(1).isFunction(); result = _([]).isFunction(); result = _({}).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 = _(undefined).isNaN(); // _.isNative result = _.isNative(Array.prototype.push); result = _(Array.prototype.push).isNative(); +{ + let value: Function|string = "foo"; + if (_.isNative(value)) { + value(); + } else { + let result: string = value; + } +} // _.isNull result = _.isNull(any); @@ -2849,6 +2917,14 @@ result = _.isNumber(any); result = _(1).isNumber(); result = _([]).isNumber(); result = _({}).isNumber(); +{ + let value: number|string = "foo"; + if (_.isNumber(value)) { + let result: number = value * 42; + } else { + let result: string = value; + } +} // _.isObject result = _.isObject(any); @@ -2867,12 +2943,29 @@ result = _.isRegExp(any); result = _(1).isRegExp(); result = _([]).isRegExp(); result = _({}).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 = _.isString(any); result = _(1).isString(); result = _([]).isString(); result = _({}).isString(); +{ + let value: string|number = "foo"; + if (_.isString(value)) { + let result: string = value; + } else { + let result: number = value * 42; + } +} // _.isTypedArray result = _.isTypedArray([]); diff --git a/lodash/lodash.d.ts b/lodash/lodash.d.ts index 384c42152..80faa0d93 100644 --- a/lodash/lodash.d.ts +++ b/lodash/lodash.d.ts @@ -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 { @@ -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 { @@ -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 { @@ -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 { @@ -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 { @@ -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 { @@ -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 { @@ -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 { @@ -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 { @@ -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 { @@ -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 {