#typescript
Вопрос:
Я видел этот extends
синтаксис:
export type MyType<Data extends Base = Base> = { data: Data }
Что делает использование Base = Base
do?
В машинописной документации по дженерикам это не объясняется.
Ответ №1:
Универсальный параметр по умолчанию — docs
Это позволяет вам вызывать MyType
без общего параметра.
type Base = { tag: 'Base' }
export type MyType<Data extends Base = Base> = { data: Data }
// type WithArgument = {
// data: {
// tag: 'Base';
// name: 'John';
// };
// }
type WithArgument = MyType<{ tag: 'Base', name: 'John' }>
// { data: Base; }
type Result = MyType
Чистая аналогия js:
const myType = (arg = { tag: 'Base' }) => arg
const result = myType() // { tag: 'Base' }
Это Data extends Base = Base
означает, что:
- Данные должны расширять базу
- Если данные не предоставлены, используйте Базу по умолчанию
Вот как его можно разделить на две части:
Data extends Base
Data = Base
Вы не должны читать Base = Base
отдельно от extends word
Ответ №2:
Это значение по умолчанию generic. Например:
type MyType<Data extends Object = String> = { data: Data }
let test: MyType = {data: 'test'}; // Same as MyType<string>
console.log(typeof test.data); // prints string
let test2: MyType<Number> = {data: 5};
console.log(typeof test2.data); // prints number