首页 > 解决方案 > 从对象文字自动推断的记录类型(例如`uknown`)

问题描述

在打字稿中,我可以将对象文字保持为无类型,以便自动推断类型,或者我可以指定一个类型(例如Record),以便在文字上强制执行该类型。-- (1)

我想强制执行Record<unknown, A>,以便可以从文字中推断出属性(作为联合类型,如"prop1" | "prop2" | "prop3"),并对值进行类型检查A

即我想要求打字稿在(1)中的每种情况下做一半的事情。

这可能吗?Record<unknown, A>抱怨而不是推断未知的类型

TS2344: Type 'unknown' does not satisfy the constraint 'string | number | symbol'.   Type 'unknown' is not assignable to type 'symbol'.

在此打字稿游乐场链接上查看最小复制品

标签: typescript

解决方案


这需要部分类型推断,Typescript 还没有。

这里的一种解决方案是让 TS 推断类型,然后验证记录值的类型,即。就像是

const obj = {
  prop1: 'foo',
  prop2: 42,
  prop3: true
}

function fun<Keys extends string>(input: Record<Keys, string | number>) {}

fun(obj) // error: boolean not an accepted value

推荐阅读