Предисловие
==
Атрибуты объекта должны быть реализованы в TS. Атрибуты объекта очень распространены в процессе разработки. Когда внешний интерфейс передает параметры, некоторые параметры являются обязательными, а некоторые необязательными. Мы можем определить несколько объектов для реализации передачи параметров, но это затрудняет работу. код становится избыточным. Мы можем добиться этого, определив типы данных через TS.
1. Сделайте указанный ключ типа объекта необязательным.
=================
1. Внедрить используемые основы ts
type A = {
name:string,
age:number
}
type changeA<T> = {
[K in keyof T]:string
}
let resultType:changeA<A> = {
name:'zhangsan',
age:'11'
}
type PartialByKeys<T, K extends keyof T> = {
[P in K]?: T[P];
} & Pick<T, Exclude<keyof T, K>>;
type Simplity<T> = { [P in keyof T]: T[P] }
type Info = {
name: string,
id: number,
age: number
class: string
}
type resultType = Simplity<PartialByKeys<Info, 'id'|'name'>>
resultType
Типы данных следующие::
Первый взгляд на PartialByKeys,Реализованы дополнительные атрибуты,Необязательные атрибуты реализуются с помощью?
,Главным образом через[P in K]?: T[P]
Реализация заявления。
PartialByKeys<T, K extends keyof T> = {
[P in K]?: T[P];
}
'id'|'name'
'name'| 'id'| 'age'| 'class'
id
,name
id
,name
значение атрибута,Прямо сейчасnumber
,string
Таким образом, цель PartialByKeys — извлечь наиболее необязательный ключ, указанный типом объекта, и создать новый объект. Конечный результат выглядит следующим образом:
{
id? : number | undefined ,
name? : string | undefined
}
Тип объекта необязательного атрибута получен выше.,Как объединить другие типы объектов атрибутов, кроме необязательных атрибутов, с необязательными типами объектов атрибутов?,Наш окончательный результатдахочу один, включаяinfo
объектсередина Все объекты недвижимостиизобъекттип。Идея заключается в следующем:
использоватьTSсерединаизExclude
Тип инструмента,Удаляет указанный атрибут из типа объединения середина.,Наконец, получите тип объединения.
Exclude<keyof T, K>
'id' | 'name'
'name'| 'id'| 'age'| 'class'
затемиспользоватьPick
Тип инструмента,отобъектизтип(info
)середина抽取出指定типизключевое значение,Создайте новый тип объекта.
Pick<T, Exclude<keyof T, K>>
Цель второй половины — извлечь необходимые атрибуты для формирования нового объекта.,получить результаты:'age' | 'class'
,Затем сгенерируйте новые объекты с помощью Pick, чтобы получить следующие типы объектов:
{
age:number,
class:string
}
Наконец, окончательный результат получается путем пересечения двух типов объектов.
2. Требуются атрибуты реализации.
========
Логика реализации обязательных и необязательных атрибутов в основном одинакова. Есть некоторые различия, в основном в извлечении указанных атрибутов для создания новых объектов.
1. Реализация кода
type RequiredByKeys<T, K extends keyof T> = {
[P in K]-?: T[P];
} & Pick<T, Exclude<keyof T, K>>;
type Simplity<T> = { [P in keyof T]: T[P] }
type Info = {
name: string,
id: number,
age?: number
class?: string
}
type resultType = RequiredByKeys<PartialByKeys<Info, 'age'|'class'>>
читать,-
№ можно удалить по желанию и толькочитатьreadonly
,Поэтому необязательные атрибуты передаются в качестве параметров. Идеи следующей реализации:
RequiredByKeys<T, K extends keyof T> = {
[P in K]-?: T[P];
Результат приведенного выше кода:
{
name:string,
id:number
}
Далее посмотрите на это:
Pick<T, Exclude<keyof T, K>>;
Результат следующий:
{
age:number,
class:string
}
Наконец объедините, чтобы получить окончательный результат
Я участвую в третьем этапе специального тренировочного лагеря Tencent Technology Creation 2023 с эссе, получившими приз, и сформирую команду, которая разделит приз!