From 57134dd34464b6db8a9ede3087f731af92068280 Mon Sep 17 00:00:00 2001 From: Matthieu Riegler Date: Tue, 8 Oct 2024 17:53:58 +0200 Subject: [PATCH] refactor(core): drop the `Mutable` utility type. (#58124) The complexity of this type isn't necessary, `Writable` is well suited where it was used. PR Close #58124 --- packages/core/src/interface/type.ts | 4 ---- packages/core/src/render3/definition.ts | 18 ++++++------------ .../features/input_transforms_feature.ts | 4 ++-- 3 files changed, 8 insertions(+), 18 deletions(-) diff --git a/packages/core/src/interface/type.ts b/packages/core/src/interface/type.ts index 3d165e65c41..90b1e54bf4e 100644 --- a/packages/core/src/interface/type.ts +++ b/packages/core/src/interface/type.ts @@ -38,10 +38,6 @@ export interface Type extends Function { new (...args: any[]): T; } -export type Mutable = { - [P in K]: T[P]; -}; - /** * Returns a writable type version of type. * diff --git a/packages/core/src/render3/definition.ts b/packages/core/src/render3/definition.ts index 492d1e0fb35..63d44e540cb 100644 --- a/packages/core/src/render3/definition.ts +++ b/packages/core/src/render3/definition.ts @@ -8,7 +8,7 @@ import {ChangeDetectionStrategy} from '../change_detection/constants'; import {formatRuntimeError, RuntimeErrorCode} from '../errors'; -import {Mutable, Type} from '../interface/type'; +import {Type, Writable} from '../interface/type'; import {NgModuleDef} from '../metadata/ng_module_def'; import {SchemaMetadata} from '../metadata/schema'; import {ViewEncapsulation} from '../metadata/view'; @@ -338,14 +338,14 @@ interface ComponentDefinition extends Omit, 'features' */ export function ɵɵdefineComponent( componentDefinition: ComponentDefinition, -): Mutable, keyof ComponentDef> { +): ComponentDef { return noSideEffects(() => { // Initialize ngDevMode. This must be the first statement in ɵɵdefineComponent. // See the `initNgDevMode` docstring for more information. (typeof ngDevMode === 'undefined' || ngDevMode) && initNgDevMode(); const baseDef = getNgDirectiveDef(componentDefinition as DirectiveDefinition); - const def: Mutable, keyof ComponentDef> = { + const def: Writable> = { ...baseDef, decls: componentDefinition.decls, vars: componentDefinition.vars, @@ -558,7 +558,7 @@ function parseAndConvertBindingsForDefinition( */ export function ɵɵdefineDirective( directiveDefinition: DirectiveDefinition, -): Mutable, keyof DirectiveDef> { +): DirectiveDef { return noSideEffects(() => { const def = getNgDirectiveDef(directiveDefinition); initFeatures(def); @@ -649,9 +649,7 @@ export function getNgModuleDef(type: any, throwNotFound?: boolean): NgModuleD return ngModuleDef; } -function getNgDirectiveDef( - directiveDefinition: DirectiveDefinition, -): Mutable, keyof DirectiveDef> { +function getNgDirectiveDef(directiveDefinition: DirectiveDefinition): DirectiveDef { const declaredInputs: Record = {}; return { @@ -680,11 +678,7 @@ function getNgDirectiveDef( }; } -function initFeatures( - definition: - | Mutable, keyof DirectiveDef> - | Mutable, keyof ComponentDef>, -): void { +function initFeatures(definition: DirectiveDef | ComponentDef): void { definition.features?.forEach((fn) => fn(definition)); } diff --git a/packages/core/src/render3/features/input_transforms_feature.ts b/packages/core/src/render3/features/input_transforms_feature.ts index 552e52e962a..76aea41f1d1 100644 --- a/packages/core/src/render3/features/input_transforms_feature.ts +++ b/packages/core/src/render3/features/input_transforms_feature.ts @@ -6,7 +6,7 @@ * found in the LICENSE file at https://angular.dev/license */ -import {Mutable} from '../../interface/type'; +import {Writable} from '../../interface/type'; import {DirectiveDef, InputTransformFunction} from '../interfaces/definition'; /** @@ -32,5 +32,5 @@ export function ɵɵInputTransformsFeature(definition: DirectiveDef): void } } - (definition as Mutable, 'inputTransforms'>).inputTransforms = inputTransforms; + (definition as Writable>).inputTransforms = inputTransforms; }