From c4deeeee60446f8fe9ad32b3f59bfeb8df23b759 Mon Sep 17 00:00:00 2001 From: Nathan Shively-Sanders Date: Mon, 2 Oct 2017 10:23:55 -0700 Subject: [PATCH] Strict function variance fixes round 1, stage 2 --- types/knockout/index.d.ts | 4 +- types/knockout/tsconfig.json | 3 +- types/lodash/index.d.ts | 169 ++++++++++++++++++++++++++--------- types/lodash/lodash-tests.ts | 146 +++++++++++++++--------------- types/lodash/tsconfig.json | 3 +- types/log4js/log4js-tests.ts | 4 +- types/log4js/tsconfig.json | 3 +- types/node/node-tests.ts | 4 +- 8 files changed, 213 insertions(+), 123 deletions(-) diff --git a/types/knockout/index.d.ts b/types/knockout/index.d.ts index 3a206fd04c..4ef3bc8739 100644 --- a/types/knockout/index.d.ts +++ b/types/knockout/index.d.ts @@ -151,8 +151,8 @@ interface KnockoutAllBindingsAccessor { interface KnockoutBindingHandler { after?: Array; - init?: (element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) => void | { controlsDescendantBindings: boolean; }; - update?: (element: any, valueAccessor: () => any, allBindingsAccessor?: KnockoutAllBindingsAccessor, viewModel?: any, bindingContext?: KnockoutBindingContext) => void; + init?: (element: any, valueAccessor: () => any, allBindingsAccessor: KnockoutAllBindingsAccessor, viewModel: any, bindingContext: KnockoutBindingContext) => void | { controlsDescendantBindings: boolean; }; + update?: (element: any, valueAccessor: () => any, allBindingsAccessor: KnockoutAllBindingsAccessor, viewModel: any, bindingContext: KnockoutBindingContext) => void; options?: any; preprocess?: (value: string, name: string, addBindingCallback?: (name: string, value: string) => void) => string; [s: string]: any; diff --git a/types/knockout/tsconfig.json b/types/knockout/tsconfig.json index f6f1635804..9e76a7c908 100644 --- a/types/knockout/tsconfig.json +++ b/types/knockout/tsconfig.json @@ -8,6 +8,7 @@ "noImplicitAny": false, "noImplicitThis": false, "strictNullChecks": true, + "strictFunctionTypes": true, "baseUrl": "../", "typeRoots": [ "../" @@ -21,4 +22,4 @@ "test/templatingBehaviors.ts", "test/index.ts" ] -} \ No newline at end of file +} diff --git a/types/lodash/index.d.ts b/types/lodash/index.d.ts index d487135799..58698cb4f3 100644 --- a/types/lodash/index.d.ts +++ b/types/lodash/index.d.ts @@ -4794,6 +4794,14 @@ declare namespace _ { * _.uniqBy([{ 'x': 1 }, { 'x': 2 }, { 'x': 1 }], 'x'); * // => [{ 'x': 1 }, { 'x': 2 }] */ + uniqBy( + array: TString, + iteratee: StringIterator + ): TString[]; + + /** + * @see _.uniqBy + */ uniqBy( array: List | null | undefined, iteratee: ListIterator @@ -4832,6 +4840,24 @@ declare namespace _ { ): T[]; } + interface LoDashImplicitStringWrapper { + /** + * @see _.uniqBy + */ + uniqBy( + iteratee: StringIterator + ): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitStringWrapper { + /** + * @see _.uniqBy + */ + uniqBy( + iteratee: StringIterator + ): LoDashExplicitArrayWrapper; + } + interface LoDashImplicitWrapper { /** * @see _.uniqBy @@ -5074,6 +5100,14 @@ declare namespace _ { * _.sortedUniqBy([1.1, 1.2, 2.3, 2.4], Math.floor); * // => [1.1, 2.2] */ + sortedUniqBy( + array: TString, + iteratee: StringIterator + ): TString[]; + + /** + * @see _.sortedUniqBy + */ sortedUniqBy( array: List | null | undefined, iteratee: ListIterator @@ -5112,6 +5146,24 @@ declare namespace _ { ): T[]; } + interface LoDashImplicitStringWrapper { + /** + * @see _.sortedUniqBy + */ + sortedUniqBy( + iteratee: StringIterator + ): LoDashImplicitArrayWrapper; + } + + interface LoDashExplicitStringWrapper { + /** + * @see _.sortedUniqBy + */ + sortedUniqBy( + iteratee: StringIterator + ): LoDashExplicitArrayWrapper; + } + interface LoDashImplicitWrapper { /** * @see _.sortedUniqBy @@ -5823,6 +5875,13 @@ declare namespace _ { chain(value: any): LoDashExplicitWrapper; } + interface LoDashImplicitStringWrapper { + /** + * @see _.chain + */ + chain(): LoDashExplicitStringWrapper; + } + interface LoDashImplicitWrapper { /** * @see _.chain @@ -7796,6 +7855,14 @@ declare namespace _ { * @param thisArg The this binding of iteratee. * @return Returns the composed aggregate object. */ + groupBy( + collection: TString, + iteratee?: StringIterator + ): Dictionary; + + /** + * @see _.groupBy + */ groupBy( collection: List | null | undefined, iteratee?: ListIterator @@ -8165,6 +8232,24 @@ declare namespace _ { ): Dictionary; } + interface LoDashImplicitStringWrapper { + /** + * @see _.keyBy + */ + keyBy( + iteratee?: StringIterator | undefined + ): LoDashImplicitObjectWrapper> + } + + interface LoDashExplicitStringWrapper { + /** + * @see _.keyBy + */ + keyBy( + iteratee?: StringIterator | undefined + ): LoDashExplicitObjectWrapper> + } + interface LoDashImplicitWrapper { /** * @see _.keyBy @@ -8849,53 +8934,53 @@ declare namespace _ { accumulator: TResult): TResult; /** - * @see _.reduce - **/ + * @see _.reduce + **/ reduce( collection: List | null | undefined, callback: MemoIterator, accumulator: TResult): TResult; /** - * @see _.reduce - **/ + * @see _.reduce + **/ reduce( collection: Dictionary | null | undefined, callback: MemoIterator, accumulator: TResult): TResult; /** - * @see _.reduce - **/ + * @see _.reduce + **/ reduce( collection: NumericDictionary | null | undefined, callback: MemoIterator, accumulator: TResult): TResult; /** - * @see _.reduce - **/ + * @see _.reduce + **/ reduce( collection: T[] | null | undefined, callback: MemoIterator): TResult | undefined; /** - * @see _.reduce - **/ + * @see _.reduce + **/ reduce( collection: List | null | undefined, callback: MemoIterator): TResult | undefined; /** - * @see _.reduce - **/ + * @see _.reduce + **/ reduce( collection: Dictionary | null | undefined, callback: MemoIterator): TResult | undefined; /** - * @see _.reduce - **/ + * @see _.reduce + **/ reduce( collection: NumericDictionary | null | undefined, callback: MemoIterator): TResult | undefined; @@ -12606,7 +12691,7 @@ declare namespace _ { } //_.isMatchWith - type isMatchWithCustomizer = (value: any, other: any, indexOrKey?: number|string) => boolean; + type isMatchWithCustomizer = (value: any, other: any, indexOrKey: number|string) => boolean; interface LoDashStatic { /** @@ -14155,7 +14240,7 @@ declare namespace _ { * @see _.sumBy */ sumBy( - iteratee: ListIterator<{}, number> + iteratee: ListIterator ): number; /** @@ -14198,7 +14283,7 @@ declare namespace _ { * @see _.sumBy */ sumBy( - iteratee: ListIterator<{}, number> + iteratee: ListIterator ): LoDashExplicitWrapper; /** @@ -16955,7 +17040,7 @@ declare namespace _ { } //_.mergeWith - type MergeWithCustomizer = (value: any, srcValue: any, key?: string, object?: Object, source?: Object) => any; + type MergeWithCustomizer = { bivariantHack(value: any, srcValue: any, key: string, object: any, source: any): any; }["bivariantHack"] interface LoDashStatic { /** @@ -17438,31 +17523,31 @@ declare namespace _ { * @parem customizer The function to customize assigned values. * @return Returns object. */ + setWith( + object: O, + path: Many, + value: V, + customizer?: SetWithCustomizer + ): TResult; + + /** + * @see _.setWith + */ setWith( - object: Object, + object: any, path: Many, value: any, - customizer?: SetWithCustomizer + customizer?: SetWithCustomizer ): TResult; /** * @see _.setWith */ setWith( - object: Object, + object: any, path: Many, value: V, - customizer?: SetWithCustomizer - ): TResult; - - /** - * @see _.setWith - */ - setWith( - object: O, - path: Many, - value: V, - customizer?: SetWithCustomizer + customizer?: SetWithCustomizer ): TResult; } @@ -17782,22 +17867,22 @@ declare namespace _ { * _.updateWith(object, '[0][1]', _.constant('a'), Object); * // => { '0': { '1': 'a' } } */ - updateWith( - object: Object, - path: Many, - updater: (oldValue: any) => any, - customizer?: SetWithCustomizer - ): TResult; - - /** - * @see _.updateWith - */ updateWith( object: O, path: Many, updater: (oldValue: any) => any, customizer?: SetWithCustomizer ): TResult; + + /** + * @see _.updateWith + */ + updateWith( + object: any, + path: Many, + updater: (oldValue: any) => any, + customizer?: SetWithCustomizer + ): TResult; } interface LoDashImplicitObjectWrapper { diff --git a/types/lodash/lodash-tests.ts b/types/lodash/lodash-tests.ts index ed80175d6f..3e13b70ac8 100644 --- a/types/lodash/lodash-tests.ts +++ b/types/lodash/lodash-tests.ts @@ -2256,7 +2256,7 @@ namespace TestUniqBy { let result: string[]; result = _.uniqBy('abc', stringIterator); - result = _.uniqBy('abc', stringIterator); + result = _.uniqBy('abc', stringIterator); } { @@ -2278,7 +2278,7 @@ namespace TestUniqBy { { let result: _.LoDashImplicitArrayWrapper; - result = _('abc').uniqBy(stringIterator); + result = _('abc').uniqBy(stringIterator); } { @@ -2298,7 +2298,7 @@ namespace TestUniqBy { { let result: _.LoDashExplicitArrayWrapper; - result = _('abc').chain().uniqBy(stringIterator); + result = _('abc').chain().uniqBy(stringIterator); } { @@ -2371,7 +2371,7 @@ namespace TestSortedUniqBy { let result: string[]; result = _.sortedUniqBy('abc', stringIterator); - result = _.sortedUniqBy('abc', stringIterator); + result = _.sortedUniqBy('abc', stringIterator); } { @@ -2393,7 +2393,7 @@ namespace TestSortedUniqBy { { let result: _.LoDashImplicitArrayWrapper; - result = _('abc').sortedUniqBy(stringIterator); + result = _('abc').sortedUniqBy(stringIterator); } { @@ -2413,7 +2413,7 @@ namespace TestSortedUniqBy { { let result: _.LoDashExplicitArrayWrapper; - result = _('abc').chain().sortedUniqBy(stringIterator); + result = _('abc').chain().sortedUniqBy(stringIterator); } { @@ -3345,7 +3345,7 @@ namespace TestCountBy { let dictionary: _.Dictionary | null | undefined = obj; let numericDictionary: _.NumericDictionary | null | undefined = obj; - let stringIterator: (value: string, index: number, collection: string) => any = (value: string, index: number, collection: string) => 1; + let stringIterator: (value: string, index: number, collection: ArrayLike) => any = (value: string, index: number, collection: ArrayLike) => 1; let listIterator: (value: TResult, index: number, collection: _.List) => any = (value: TResult, index: number, collection: _.List) => 1; let dictionaryIterator: (value: TResult, key: string, collection: _.Dictionary) => any = (value: TResult, key: string, collection: _.Dictionary) => 1; let numericDictionaryIterator: (value: TResult, key: number, collection: _.NumericDictionary) => any = (value: TResult, key: number, collection: _.NumericDictionary) => 1; @@ -4557,7 +4557,7 @@ namespace TestForEach { { let result: TResult[]; - result = _.forEach(array, (value, index, collection: TResult[]) => { + result = _.forEach(array, (value, index, collection: ArrayLike) => { value; // $ExpectType TResult index; // $ExpectType number }); @@ -4572,7 +4572,7 @@ namespace TestForEach { { let result: TResult[] | null | undefined; - result = _.forEach(array, (value, index, collection: TResult[]) => { + result = _.forEach(array, (value, index, collection: ArrayLike) => { value; // $ExpectType TResult index; // $ExpectType number }); @@ -4990,7 +4990,7 @@ namespace TestGroupBy { let result: _.LoDashImplicitObjectWrapper<_.Dictionary>; result = _('').groupBy(); - result = _('').groupBy(stringIterator); + result = _('').groupBy((char: string, index: number, string: ArrayLike) => 0); } { @@ -5025,7 +5025,7 @@ namespace TestGroupBy { let result: _.LoDashExplicitObjectWrapper<_.Dictionary>; result = _('').chain().groupBy(); - result = _('').chain().groupBy(stringIterator); + result = _('').chain().groupBy((char: string, index: number, string: ArrayLike) => 0); } { @@ -5547,7 +5547,7 @@ namespace TestReduce { result = _.reduce({ 'a': 1, 'b': 2, 'c': 3 }, (r: ABC, num: number, key: string) => { r[key] = num * 3; return r; - }, {}); + }, {} as ABC); result = _([1, 2, 3]).reduce((sum: number, num: number) => sum + num); result = _({ 'a': 1, 'b': 2, 'c': 3 }).reduce((r: ABC, num: number, key: string) => { @@ -6487,6 +6487,7 @@ namespace TestDebounce { interface ResultFunc { (n: number, s: string): boolean; cancel(): void; + flush(): void; } let func: SampleFunc = (a, b) => true; @@ -6959,6 +6960,7 @@ namespace TestThrottle { interface ResultFunc { (n: number, s: string): boolean; cancel(): void; + flush(): void; } let func: SampleFunc = (a, b) => true; @@ -8980,7 +8982,7 @@ namespace TestSumBy { result = _(array).sumBy(listIterator); result = _(objectArray).sumBy('age'); - result = _(list).sumBy(listIterator); + result = _(list).sumBy((value: _.List | null | undefined, index: number, collection: _.List<_.List | null | undefined>) => 0); result = _(objectList).sumBy('age'); } @@ -8990,7 +8992,7 @@ namespace TestSumBy { result = _(array).chain().sumBy(listIterator); result = _(objectArray).chain().sumBy('age'); - result = _(list).chain().sumBy(listIterator); + result = _(list).chain().sumBy((value: _.List | null | undefined, index: number, collection: _.List<_.List | null | undefined>) => 0); result = _(objectList).chain().sumBy('age'); } } @@ -9146,25 +9148,25 @@ namespace TestAssign { } { - let result: _.LoDashImplicitObjectWrapper<{ a: number }>; + let result: _.LoDashImplicitObjectWrapper<{ a: number & string }>; result = _(obj).assign(s1); } { - let result: _.LoDashImplicitObjectWrapper<{ a: number, b: number }>; + let result: _.LoDashImplicitObjectWrapper<{ a: number & string, b: number }>; result = _(obj).assign(s1, s2); } { - let result: _.LoDashImplicitObjectWrapper<{ a: number, b: number, c: number }>; + let result: _.LoDashImplicitObjectWrapper<{ a: number & string, b: number, c: number }>; result = _(obj).assign(s1, s2, s3); } { - let result: _.LoDashImplicitObjectWrapper<{ a: number, b: number, c: number, d: number }>; + let result: _.LoDashImplicitObjectWrapper<{ a: number & string, b: number, c: number, d: number }>; result = _(obj).assign(s1, s2, s3, s4); } @@ -9182,25 +9184,25 @@ namespace TestAssign { } { - let result: _.LoDashExplicitObjectWrapper<{ a: number }>; + let result: _.LoDashExplicitObjectWrapper<{ a: number & string }>; result = _(obj).chain().assign(s1); } { - let result: _.LoDashExplicitObjectWrapper<{ a: number, b: number }>; + let result: _.LoDashExplicitObjectWrapper<{ a: number & string, b: number }>; result = _(obj).chain().assign(s1, s2); } { - let result: _.LoDashExplicitObjectWrapper<{ a: number, b: number, c: number }>; + let result: _.LoDashExplicitObjectWrapper<{ a: number & string, b: number, c: number }>; result = _(obj).chain().assign(s1, s2, s3); } { - let result: _.LoDashExplicitObjectWrapper<{ a: number, b: number, c: number, d: number }>; + let result: _.LoDashExplicitObjectWrapper<{ a: number & string, b: number, c: number, d: number }>; result = _(obj).chain().assign(s1, s2, s3, s4); } @@ -9268,22 +9270,22 @@ namespace TestAssignWith { } { - let result: _.LoDashImplicitObjectWrapper<{ a: number }>; + let result: _.LoDashImplicitObjectWrapper<{ a: number & string }>; result = _(obj).assignWith(s1, customizer); } { - let result: _.LoDashImplicitObjectWrapper<{ a: number, b: number }>; + let result: _.LoDashImplicitObjectWrapper<{ a: number & string, b: number }>; result = _(obj).assignWith(s1, s2, customizer); } { - let result: _.LoDashImplicitObjectWrapper<{ a: number, b: number, c: number }>; + let result: _.LoDashImplicitObjectWrapper<{ a: number & string, b: number, c: number }>; result = _(obj).assignWith(s1, s2, s3, customizer); } { - let result: _.LoDashImplicitObjectWrapper<{ a: number, b: number, c: number, d: number }>; + let result: _.LoDashImplicitObjectWrapper<{ a: number & string, b: number, c: number, d: number }>; result = _(obj).assignWith(s1, s2, s3, s4, customizer); } @@ -9299,22 +9301,22 @@ namespace TestAssignWith { } { - let result: _.LoDashExplicitObjectWrapper<{ a: number }>; + let result: _.LoDashExplicitObjectWrapper<{ a: number & string }>; result = _(obj).chain().assignWith(s1, customizer); } { - let result: _.LoDashExplicitObjectWrapper<{ a: number, b: number }>; + let result: _.LoDashExplicitObjectWrapper<{ a: number & string, b: number }>; result = _(obj).chain().assignWith(s1, s2, customizer); } { - let result: _.LoDashExplicitObjectWrapper<{ a: number, b: number, c: number }>; + let result: _.LoDashExplicitObjectWrapper<{ a: number & string, b: number, c: number }>; result = _(obj).chain().assignWith(s1, s2, s3, customizer); } { - let result: _.LoDashExplicitObjectWrapper<{ a: number, b: number, c: number, d: number }>; + let result: _.LoDashExplicitObjectWrapper<{ a: number & string, b: number, c: number, d: number }>; result = _(obj).chain().assignWith(s1, s2, s3, s4, customizer); } @@ -9385,25 +9387,25 @@ namespace TestAssignIn { } { - let result: _.LoDashImplicitObjectWrapper<{ a: number }>; + let result: _.LoDashImplicitObjectWrapper<{ a: number & string }>; result = _(obj).assignIn(s1); } { - let result: _.LoDashImplicitObjectWrapper<{ a: number, b: number }>; + let result: _.LoDashImplicitObjectWrapper<{ a: number & string, b: number }>; result = _(obj).assignIn(s1, s2); } { - let result: _.LoDashImplicitObjectWrapper<{ a: number, b: number, c: number }>; + let result: _.LoDashImplicitObjectWrapper<{ a: number & string, b: number, c: number }>; result = _(obj).assignIn(s1, s2, s3); } { - let result: _.LoDashImplicitObjectWrapper<{ a: number, b: number, c: number, d: number }>; + let result: _.LoDashImplicitObjectWrapper<{ a: number & string, b: number, c: number, d: number }>; result = _(obj).assignIn(s1, s2, s3, s4); } @@ -9421,25 +9423,25 @@ namespace TestAssignIn { } { - let result: _.LoDashExplicitObjectWrapper<{ a: number }>; + let result: _.LoDashExplicitObjectWrapper<{ a: number & string }>; result = _(obj).chain().assignIn(s1); } { - let result: _.LoDashExplicitObjectWrapper<{ a: number, b: number }>; + let result: _.LoDashExplicitObjectWrapper<{ a: number & string, b: number }>; result = _(obj).chain().assignIn(s1, s2); } { - let result: _.LoDashExplicitObjectWrapper<{ a: number, b: number, c: number }>; + let result: _.LoDashExplicitObjectWrapper<{ a: number & string, b: number, c: number }>; result = _(obj).chain().assignIn(s1, s2, s3); } { - let result: _.LoDashExplicitObjectWrapper<{ a: number, b: number, c: number, d: number }>; + let result: _.LoDashExplicitObjectWrapper<{ a: number & string, b: number, c: number, d: number }>; result = _(obj).chain().assignIn(s1, s2, s3, s4); } @@ -9507,22 +9509,22 @@ namespace TestAssignInWith { } { - let result: _.LoDashImplicitObjectWrapper<{ a: number }>; + let result: _.LoDashImplicitObjectWrapper<{ a: number & string }>; result = _(obj).assignInWith(s1, customizer); } { - let result: _.LoDashImplicitObjectWrapper<{ a: number, b: number }>; + let result: _.LoDashImplicitObjectWrapper<{ a: number & string, b: number }>; result = _(obj).assignInWith(s1, s2, customizer); } { - let result: _.LoDashImplicitObjectWrapper<{ a: number, b: number, c: number }>; + let result: _.LoDashImplicitObjectWrapper<{ a: number & string, b: number, c: number }>; result = _(obj).assignInWith(s1, s2, s3, customizer); } { - let result: _.LoDashImplicitObjectWrapper<{ a: number, b: number, c: number, d: number }>; + let result: _.LoDashImplicitObjectWrapper<{ a: number & string, b: number, c: number, d: number }>; result = _(obj).assignInWith(s1, s2, s3, s4, customizer); } @@ -9538,22 +9540,22 @@ namespace TestAssignInWith { } { - let result: _.LoDashExplicitObjectWrapper<{ a: number }>; + let result: _.LoDashExplicitObjectWrapper<{ a: number & string }>; result = _(obj).chain().assignInWith(s1, customizer); } { - let result: _.LoDashExplicitObjectWrapper<{ a: number, b: number }>; + let result: _.LoDashExplicitObjectWrapper<{ a: number & string, b: number }>; result = _(obj).chain().assignInWith(s1, s2, customizer); } { - let result: _.LoDashExplicitObjectWrapper<{ a: number, b: number, c: number }>; + let result: _.LoDashExplicitObjectWrapper<{ a: number & string, b: number, c: number }>; result = _(obj).chain().assignInWith(s1, s2, s3, customizer); } { - let result: _.LoDashExplicitObjectWrapper<{ a: number, b: number, c: number, d: number }>; + let result: _.LoDashExplicitObjectWrapper<{ a: number & string, b: number, c: number, d: number }>; result = _(obj).chain().assignInWith(s1, s2, s3, s4, customizer); } @@ -9652,25 +9654,25 @@ namespace TestDefaults { } { - let result: _.LoDashImplicitObjectWrapper<{ a: string }>; + let result: _.LoDashImplicitObjectWrapper<{ a: string & number }>; result = _(obj).defaults(s1); } { - let result: _.LoDashImplicitObjectWrapper<{ a: string, b: number }>; + let result: _.LoDashImplicitObjectWrapper<{ a: string & number, b: number }>; result = _(obj).defaults(s1, s2); } { - let result: _.LoDashImplicitObjectWrapper<{ a: string, b: number, c: number }>; + let result: _.LoDashImplicitObjectWrapper<{ a: string & number, b: number, c: number }>; result = _(obj).defaults(s1, s2, s3); } { - let result: _.LoDashImplicitObjectWrapper<{ a: string, b: number, c: number, d: number }>; + let result: _.LoDashImplicitObjectWrapper<{ a: string & number, b: number, c: number, d: number }>; result = _(obj).defaults(s1, s2, s3, s4); } @@ -9688,25 +9690,25 @@ namespace TestDefaults { } { - let result: _.LoDashExplicitObjectWrapper<{ a: string }>; + let result: _.LoDashExplicitObjectWrapper<{ a: string & number }>; result = _(obj).chain().defaults(s1); } { - let result: _.LoDashExplicitObjectWrapper<{ a: string, b: number }>; + let result: _.LoDashExplicitObjectWrapper<{ a: string & number, b: number }>; result = _(obj).chain().defaults(s1, s2); } { - let result: _.LoDashExplicitObjectWrapper<{ a: string, b: number, c: number }>; + let result: _.LoDashExplicitObjectWrapper<{ a: string & number, b: number, c: number }>; result = _(obj).chain().defaults(s1, s2, s3); } { - let result: _.LoDashExplicitObjectWrapper<{ a: string, b: number, c: number, d: number }>; + let result: _.LoDashExplicitObjectWrapper<{ a: string & number, b: number, c: number, d: number }>; result = _(obj).chain().defaults(s1, s2, s3, s4); } @@ -9873,25 +9875,25 @@ namespace TestExtend { } { - let result: _.LoDashImplicitObjectWrapper<{ a: number }>; + let result: _.LoDashImplicitObjectWrapper<{ a: number & string }>; result = _(obj).extend(s1); } { - let result: _.LoDashImplicitObjectWrapper<{ a: number, b: number }>; + let result: _.LoDashImplicitObjectWrapper<{ a: number & string, b: number }>; result = _(obj).extend(s1, s2); } { - let result: _.LoDashImplicitObjectWrapper<{ a: number, b: number, c: number }>; + let result: _.LoDashImplicitObjectWrapper<{ a: number & string, b: number, c: number }>; result = _(obj).extend(s1, s2, s3); } { - let result: _.LoDashImplicitObjectWrapper<{ a: number, b: number, c: number, d: number }>; + let result: _.LoDashImplicitObjectWrapper<{ a: number & string, b: number, c: number, d: number }>; result = _(obj).extend(s1, s2, s3, s4); } @@ -9909,25 +9911,25 @@ namespace TestExtend { } { - let result: _.LoDashExplicitObjectWrapper<{ a: number }>; + let result: _.LoDashExplicitObjectWrapper<{ a: number & string }>; result = _(obj).chain().extend(s1); } { - let result: _.LoDashExplicitObjectWrapper<{ a: number, b: number }>; + let result: _.LoDashExplicitObjectWrapper<{ a: number & string, b: number }>; result = _(obj).chain().extend(s1, s2); } { - let result: _.LoDashExplicitObjectWrapper<{ a: number, b: number, c: number }>; + let result: _.LoDashExplicitObjectWrapper<{ a: number & string, b: number, c: number }>; result = _(obj).chain().extend(s1, s2, s3); } { - let result: _.LoDashExplicitObjectWrapper<{ a: number, b: number, c: number, d: number }>; + let result: _.LoDashExplicitObjectWrapper<{ a: number & string, b: number, c: number, d: number }>; result = _(obj).chain().extend(s1, s2, s3, s4); } @@ -10000,25 +10002,25 @@ namespace TestExtendWith { } { - let result: _.LoDashImplicitObjectWrapper<{ a: number }>; + let result: _.LoDashImplicitObjectWrapper<{ a: number & string }>; result = _(obj).extendWith(s1, customizer); } { - let result: _.LoDashImplicitObjectWrapper<{ a: number, b: number }>; + let result: _.LoDashImplicitObjectWrapper<{ a: number & string, b: number }>; result = _(obj).extendWith(s1, s2, customizer); } { - let result: _.LoDashImplicitObjectWrapper<{ a: number, b: number, c: number }>; + let result: _.LoDashImplicitObjectWrapper<{ a: number & string, b: number, c: number }>; result = _(obj).extendWith(s1, s2, s3, customizer); } { - let result: _.LoDashImplicitObjectWrapper<{ a: number, b: number, c: number, d: number }>; + let result: _.LoDashImplicitObjectWrapper<{ a: number & string, b: number, c: number, d: number }>; result = _(obj).extendWith(s1, s2, s3, s4, customizer); } @@ -10036,25 +10038,25 @@ namespace TestExtendWith { } { - let result: _.LoDashExplicitObjectWrapper<{ a: number }>; + let result: _.LoDashExplicitObjectWrapper<{ a: number & string }>; result = _(obj).chain().extendWith(s1, customizer); } { - let result: _.LoDashExplicitObjectWrapper<{ a: number, b: number }>; + let result: _.LoDashExplicitObjectWrapper<{ a: number & string, b: number }>; result = _(obj).chain().extendWith(s1, s2, customizer); } { - let result: _.LoDashExplicitObjectWrapper<{ a: number, b: number, c: number }>; + let result: _.LoDashExplicitObjectWrapper<{ a: number & string, b: number, c: number }>; result = _(obj).chain().extendWith(s1, s2, s3, customizer); } { - let result: _.LoDashExplicitObjectWrapper<{ a: number, b: number, c: number, d: number }>; + let result: _.LoDashExplicitObjectWrapper<{ a: number & string, b: number, c: number, d: number }>; result = _(obj).chain().extendWith(s1, s2, s3, s4, customizer); } @@ -10986,7 +10988,7 @@ namespace TestMergeWith { type ExpectedResult = { a: number, b: string }; let result: ExpectedResult; - let customizer: (value: any, srcValue: any, key?: string, object?: InitialValue, source?: MergingValue) => any = (value: any, srcValue: any, key?: string, object?: InitialValue, source?: MergingValue) => 1; + let customizer: (value: any, srcValue: any, key: string, object: InitialValue, source: MergingValue) => any = (value: any, srcValue: any, key: string, object: InitialValue, source: MergingValue) => 1; // Test for basic merging result = _.mergeWith(initialValue, mergingValue, customizer); @@ -11003,7 +11005,7 @@ namespace TestMergeWith { result = _(initialValue).mergeWith({}, {}, mergingValue, customizer).value(); result = _(initialValue).mergeWith({}, {}, {}, mergingValue, customizer).value(); - // Once we get to the varargs version, you have to specify the result explicitl + // Once we get to the varargs version, you have to specify the result explicitly result = _(initialValue).mergeWith({}, {}, {}, {}, mergingValue, customizer).value(); } diff --git a/types/lodash/tsconfig.json b/types/lodash/tsconfig.json index 8239e4f277..5ba4c4bcf6 100644 --- a/types/lodash/tsconfig.json +++ b/types/lodash/tsconfig.json @@ -7,6 +7,7 @@ "noImplicitAny": true, "noImplicitThis": true, "strictNullChecks": true, + "strictFunctionTypes": true, "baseUrl": "../", "typeRoots": [ "../" @@ -315,4 +316,4 @@ "zipObjectDeep.d.ts", "zipWith.d.ts" ] -} \ No newline at end of file +} diff --git a/types/log4js/log4js-tests.ts b/types/log4js/log4js-tests.ts index af4a706e1c..9ab50d3344 100644 --- a/types/log4js/log4js-tests.ts +++ b/types/log4js/log4js-tests.ts @@ -90,10 +90,10 @@ var myAppender: log4js.AppenderModule = { return cb(null); }, - configure: function (config: MyAppenderConfig, options?: { [key: string]: any }): log4js.Appender { + configure: function (config: log4js.CustomAppenderConfig, options?: { [key: string]: any }): log4js.Appender { var mycfg = config.mycfg; return this.appender(mycfg); } } -log4js.loadAppender("my-log4js-appender", myAppender); \ No newline at end of file +log4js.loadAppender("my-log4js-appender", myAppender); diff --git a/types/log4js/tsconfig.json b/types/log4js/tsconfig.json index a71e03c82a..ea6450c12b 100644 --- a/types/log4js/tsconfig.json +++ b/types/log4js/tsconfig.json @@ -7,6 +7,7 @@ "noImplicitAny": true, "noImplicitThis": false, "strictNullChecks": false, + "strictFunctionTypes": true, "baseUrl": "../", "typeRoots": [ "../" @@ -19,4 +20,4 @@ "index.d.ts", "log4js-tests.ts" ] -} \ No newline at end of file +} diff --git a/types/node/node-tests.ts b/types/node/node-tests.ts index bfd1eaa02e..4c31be7ea8 100644 --- a/types/node/node-tests.ts +++ b/types/node/node-tests.ts @@ -2252,8 +2252,8 @@ namespace process_tests { process.once("warning", (warning: Error) => { }); process.prependListener("message", (message: any, sendHandle: any) => { }); process.prependOnceListener("SIGBREAK", () => { }); - process.on("newListener", (event: string, listener: Function) => { }); - process.once("removeListener", (event: string, listener: Function) => { }); + process.on("newListener", (event: string | symbol, listener: Function) => { }); + process.once("removeListener", (event: string | symbol, listener: Function) => { }); const listeners = process.listeners('uncaughtException'); const oldHandler = listeners[listeners.length - 1];