2021年11月30日
slug
2021-11-30
date
Nov 30, 2021
summary
Unionタイプ、搬入プロジェクト
status
Published
tags
プログラミング
type
Post
Property
const data = {
price: 1000,
enabled: true,
text: 'hogehoge'
}
type Item<T, K extends keyof T> = {
label: string
key: K
parser?: (value: T[K]) => string
}
type MappedTypeItem<T> = { [K in keyof T]: Item<T, K> }[keyof T]
type Items<T> = MappedTypeItem<T>[]
const items: Items<typeof data> = [
{
label: '金額',
key: 'price',
parser: (value) => value.toLocaleString()
},
{
label: '可否フラグ',
key: 'enabled',
parser: (value) => value ? '可' : '否'
},
{
label: 'テキスト',
key: 'text'
}
]
function outputList<T>(data: T, items: Items<T>) {
items.forEach((item) => {
const text = item.parser ? item.parser(data[item.key]) : data[item.key]
console.log(item.label, text)
})
}
outputList(data, items)
numberのunionタイプってできるのだろうか
type N = 1000 | 2000
const n: N = 3000 // Type '3000' is not assignable to type 'N'.
普通にできるな