Gls*_*nna 5 arrays types typescript
有没有办法通过数组中字段的值来定义类型?
为了简化我的问题...假设我有一个静态数组:
const arr = [
{name: 'cat', language: 'meow'},
{name: 'dog', language: 'bark'},
{name: 'cow', language: 'moo'}
]
Run Code Online (Sandbox Code Playgroud)
我希望能够创建一个函数,根据定义的名称字段获取语言,如下所示
function getLanguage(name: X) {
Run Code Online (Sandbox Code Playgroud)
我可以定义什么类型,X以便将 X(该函数的参数)限制为该对象列表中的任何名称字段?
const arr = [
{name: 'cat', language: 'meow'},
{name: 'dog', language: 'bark'},
{name: 'cow', language: 'moo'}
] as const // pay attention here
type Name = (typeof arr)[number]['name']; // evaluates into 'cat' | 'dog' | 'cow'
function getLanguage(name: Name) { }
Run Code Online (Sandbox Code Playgroud)
有几点需要理解:
as const为了告诉 TS 类型应该缩小到精确值(typeof arr)[number]- 它给出数组元素类型,就像number数组映射类型的键一样(typeof arr)[number]['name']- 它给出name数组元素类型的字段类型如果您不需要缩小类型并string满足名称字段的要求,那么只需不追加as const,结果(typeof arr)[number]['name']将被评估为string类型。
| 归档时间: |
|
| 查看次数: |
4852 次 |
| 最近记录: |