From 2103cb339cae5671a1f6fb2f9813718eb22e842f Mon Sep 17 00:00:00 2001 From: Arman Ozak Date: Tue, 29 Dec 2020 22:04:42 +0300 Subject: [PATCH] improve DeepPartial utility type --- .../packages/core/src/lib/models/utility.ts | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/npm/ng-packs/packages/core/src/lib/models/utility.ts b/npm/ng-packs/packages/core/src/lib/models/utility.ts index 6d9b44ceb6..a8ff45e319 100644 --- a/npm/ng-packs/packages/core/src/lib/models/utility.ts +++ b/npm/ng-packs/packages/core/src/lib/models/utility.ts @@ -1,8 +1,21 @@ +/* tslint:disable:ban-types */ import { TemplateRef, Type } from '@angular/core'; -export type DeepPartial = { - [P in keyof T]?: T[P] extends Record ? DeepPartial : T[P]; -}; +export type DeepPartial = Partible extends never + ? T + : { + [K in keyof T]?: DeepPartial; + }; + +type Partible = T extends Primitive | Array + ? never + : { + [K in keyof T]: T[K] extends Function ? never : T[K]; + } extends T + ? T + : never; + +export type Primitive = undefined | null | boolean | string | number | bigint | symbol; export type InferredInstanceOf = T extends Type ? U : never; export type InferredContextOf = T extends TemplateRef ? U : never;