Когда мы определяем generic type в TypeScript, мы можем указать два параметра: extended
и initialValue
. Оба этих параметра влияют на поведение и функциональность generic type, однако их отличие заключается в своем назначении.
Параметр extended
используется для расширения уже существующего типа путем добавления дополнительных свойств или методов к нему. При использовании extended
, мы можем указать новые свойства или методы, которые будут присутствовать в generic type, в дополнение к тем, которые уже определены для базового типа. Например, если у нас есть базовый тип Person
с свойствами name
и age
, мы можем создать generic type ExtendedPerson
, расширив базовый тип с помощью параметра extended
, и добавить новое свойство gender
:
type Person = { name: string; age: number; }; type ExtendedPerson<T extends Person> = T & { gender: string; }; const person: ExtendedPerson<Person> = { name: "John", age: 25, gender: "male", };
В приведенном примере ExtendedPerson
является generic type, который расширяет базовый тип Person
путем добавления свойства gender
. Теперь объект person
имеет все свойства из базового типа Person
и дополнительное свойство gender
.
Параметр initialValue
, с другой стороны, используется для указания начального значения, которое будет использоваться по умолчанию для generic type. Если явно не указано другое значение при создании переменной с использованием generic type, будет использоваться значение, указанное в параметре initialValue
. Например:
type Box<T = any> = { value: T; }; const box: Box<string> = { value: "Hello", }; const boxWithDefault: Box = { value: 10, };
В приведенном примере Box
является generic type, который содержит одно свойство value
. При создании типа Box<string>
инициализируется переменная box
со значением "Hello"
. А при создании типа Box
без указания типа параметра, создается переменная boxWithDefault
со значением 10, так как initialValue
по умолчанию равно any
.
Таким образом, отличие между extended
и initialValue
заключается в их назначении: extended
используется для расширения базового типа generic type, добавляя новые свойства или методы, а initialValue
используется для указания начального значения по умолчанию для generic type, если не указано явное значение.