Предположим, у нас есть такое перечисление,
enum CustomerType {
New = 'new',
Owner = 'self',
Loyal = 'subscriber'
}
, с помощью которого проще добавлять проверки, такие как
if(customer.type === CustomerType.New)
Что лучше всего, для ввода объекта с перечислением значения в качестве ключей. В этом случае допустим, что у нас есть метод с именем getCustomerType
, который будет возвращать
{
new: true,
self: false,
subscriber: false
}
. Также обратите внимание, что упрощение этого метода для возврата только истинного ключа может оказаться невозможным из-за дизайна:)
То, что я пробовал до сих пор, выглядит примерно так:
type CustomerConfig = { [key in CustomerType]: boolean }
Теперь допустим, что я хочу получить первый ключ от этого объекта, и это правда, я бы сделал что-то вроде этого.
export const getCustomer = (obj: CustomerConfig): CustomerType => {
const customerType = Object.keys(obj).find(x => {
// Object.keys return `string[]` instead of keyof type https://github.com/microsoft/TypeScript/issues/20853
return obj[x as keyof CustomerConfig]
})
return customerType as CustomerType
}
const tempCustomer = getCustomer({
'new': true,
'self': false,
'subscriber': false
})
console.log(tempCustomer === CustomerType.New) // true
console.log(tempCustomer === CustomerType.Owner) //false
Есть ли лучший способ сделать это?