bglh疯狂,扩大了TS string literals + unions
已经可能的可能性,看看!
它具有与javaScript的文字模板字符串相同的语法。
type Tchau = "tchau!"
type Salve = `Oi ${Tchau}`
有可能利用您的需求 +想象力做很多很酷的事情,这会给您的项目/类型增加很多。
一个很好的例子是标准化我们添加到类型的所有额外属性都需要具有前缀“ data_”和后缀“ propit”,以便我们可以创建一个具有模式的对象,该对象将有助于消费阅读以了解发送了哪些额外属性。
说话是狂热的,但是例子了吗?让我们首先创建EventData类型,它是我们对象事件的基础。
type EventData = {
id: string
name: string
step: 'first_step' | 'second_step'
}
它已经定义了属性,无法更改,但是现在我们需要发送与他在每个步骤中的字段相关的更多字段,我们可以扩展键入EventData并添加字段,但是对此,让我们使用字面类型的模板!
type FormFields = {
name: string
age: number
}
type EventDataExtraProps<T> = `field_${string & keyof T}`
// aqui vamos modificar um pouco o EventData
type EventData<T> = {
id: string
name: string
step: 'first_step' | 'second_step'
} & Record<EventDataExtraProps<T>, any>
const event: EventData<FormFields> = {
id: 'sextou?',
name: 'thayto',
step: 'first_step',
field_name: 'full_name',
field_age: 22
}
看起来很复杂,但是在大型 / lib项目中,这很简单,并且具有这样的实用性,我们已经能够进行某些属性的发送和标准化!< / p>!< / p>
我希望您学到了一些东西,如果您还没有学到一些东西,至少要阅读结尾,TMJ!