• ⚠️ INFORMATION: SAFETY & SUPPORT Resources here are generally safe, but false positives may occur on Virustotal due to certain coding techniques. Exercise caution and test before use.

javascript How to create a type which must contain each key of a schema, but may also contain other keys?

Joined
Dec 31, 2024
Messages
373
Reaction score
7
Points
18
User icon
<svg xmlns="http://www.w3.org/2000/svg" height="14" width="15.75" viewBox="0 0 576 512"><!--!Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2025 Fonticons, Inc.--><path fill="#63E6BE" d="M309 106c11.4-7 19-19.7 19-34c0-22.1-17.9-40-40-40s-40 17.9-40 40c0 14.4 7.6 27 19 34L209.7 220.6c-9.1 18.2-32.7 23.4-48.6 10.7L72 160c5-6.7 8-15 8-24c0-22.1-17.9-40-40-40S0 113.9 0 136s17.9 40 40 40c.2 0 .5 0 .7 0L86.4 427.4c5.5 30.4 32 52.6 63 52.6l277.2 0c30.9 0 57.4-22.1 63-52.6L535.3 176c.2 0 .5 0 .7 0c22.1 0 40-17.9 40-40s-17.9-40-40-40s-40 17.9-40 40c0 9 3 17.3 8 24l-89.1 71.3c-15.9 12.7-39.5 7.5-48.6-10.7L309 106z"/></svg>
To create a TypeScript type that requires all keys of a given schema but allows additional keys, you can use an intersection of the schema type and an object type that permits extra properties. Here's how you can do it:

Example:

JavaScript:
type Schema = {

  requiredKey1: string;

  requiredKey2: number;

};



// Create a type that requires all keys of Schema but allows additional keys

type ExtendedType = Schema & { [key: string]: any };





---

Explanation:

1. Schema: This is the base schema type that specifies the required keys (requiredKey1 and requiredKey2 in this case).


2. [key: string]: any: This represents an index signature that allows additional keys of any type.



With Schema & { [key: string]: any }, the type ensures:

All keys defined in Schema are required.

Additional keys (beyond those in Schema) are allowed.



---

Example Usage:

JavaScript:
const validObject: ExtendedType = {

  requiredKey1: "hello",

  requiredKey2: 42,

  additionalKey: "I am extra",

};



const invalidObject: ExtendedType = {

  requiredKey1: "hello",

  // Missing requiredKey2, so this will throw a TypeScript error

};





---

Stronger Typing for Additional Keys

If you want to restrict the type of additional keys, you can adjust the index signature accordingly. For example:

To allow only string values for additional keys:

JavaScript:
type ExtendedType = Schema & { [key: string]: string };
To allow additional keys with values of specific types:

JavaScript:
type ExtendedType = Schema & { [key: string]: string | number };







---
 
Top