Home > Software design >  Can I extend a Typescript tuple type?
Can I extend a Typescript tuple type?

Time:12-03

Say I have a Typescript tuple:

type Sandwich = [name: string, toppings: object]

Now I want to extend it:

type HotDog = [name: string, toppings: object, length: number]

Can HotDog extend Sandwich without duplication?

CodePudding user response:

Just spread one into the other:

type Sandwich = [name: string, toppings: object]
type HotDog = [...sandwich: Sandwich, length: number]
//   ^ type is [name: string, toppings: object, length: number]

See Playground

CodePudding user response:

Yes, you can extend a tuple type in TypeScript. In TypeScript, a tuple is a way to represent a fixed-size array of elements with a known number of elements, where the types of the elements are known. You can extend a tuple type by adding additional elements to the tuple type with their corresponding types.

Here is an example of how you can extend a tuple type in TypeScript:

// Define a tuple type with three elements
type Tuple = [string, number, boolean];

// Extend the tuple type by adding an additional element
// with the type Date
type ExtendedTuple = [...Tuple, Date];

// Create a variable of the extended tuple type
const tuple: ExtendedTuple = ['Hello', 42, true, new Date()];

In this example, the tuple type Tuple is defined with three elements of different types: string, number, and boolean. The tuple type is then extended with an additional element of the type Date, using the spread operator (...) to include the original elements of the Tuple type in the new extended tuple type.

You can then create a variable of the extended tuple type and assign it a tuple with the additional element. In this case, the variable tuple is of the type ExtendedTuple, which includes the four elements from the original Tuple type plus the additional Date element.

Note that when extending a tuple type, you must maintain the order of the original tuple elements and add the new element at the end of the tuple. This is because the order of the elements in a tuple is significant, and changing the order of the elements would result in a different tuple type.

In summary, you can extend a tuple type in TypeScript by adding additional elements to the tuple type with their corresponding types, using the spread operator (...) to include the original elements of the tuple type in the extended tuple type. You must maintain the order of the original tuple elements when extending the tuple type.

CodePudding user response:

No, HotDog cannot extend Sandwich without duplication because in TypeScript, tuples are not extensible. The elements in a tuple are fixed and cannot be added to or removed from. In order to extend Sandwich, the entire tuple would need to be duplicated and additional elements added to it.

You can use an interface to extend the Sandwich tuple without duplication.

For example:

interface HotDog extends Sandwich {
length: number;
}

const hotDog: HotDog = ["Hot Dog", { ketchup: true, mustard: true }, 6];

This allows you to define the HotDog tuple with the same elements as the Sandwich tuple, plus an additional element for the length.

  • Related