如果我有如下接口/类型:

interface ITest {
  abc: string[]
}

然后,我将其分配给一个对象,如下所示:

const obj: ITest = {
  abc: ["x", "y", "z"]
}

然后try 基于ABC属性的值创建一个类型...

type ABCVal = (typeof obj.abc)[number]

ABCVal变成了简单的string

How can I have 100 be equal to 101 whilst still restricting the 102 array to only contain strings?

推荐答案

您可以使用satisfies运算符和const-assertion运算符,如下所示:

interface ITest {
  abc: string[]
}

const obj =  {
  abc: ["x", "y", "z"]
} as const satisfies ITest;

type ABCVal = (typeof obj.abc)[number]
//   ^? type ABCVal = "x" | "y" | "z"

TypeScript Playground

Javascript相关问答推荐

如何在JavaScript中在文本内容中添加新行

将json数组项转换为js中的扁平

字节数组通过echo框架传输到JS blob

MongoDB中的引用

如何从一个列表中创建一个2列的表?

我们如何从一个行动中分派行动

手机上的渲染错误文本必须在文本组件中渲染,但在浏览器上没有问题<><>

虚拟滚动实现使向下滚动可滚动到末尾

变量的值在Reaction组件中的Try-Catch语句之外丢失

rxjs插入延迟数据

如何在ASP.NET项目中使用Google Chart API JavaScript将二次轴线值格式化为百分比

在VS代码上一次设置多个变量格式

Django导入问题,无法导入我的应用程序,但我已在设置中安装了它

ReferenceError:无法在初始化之前访问setData

ComponentWillReceiveProps仍在React 18.2.0中工作

bootstrap S JS赢得了REACT中的函数/加载

如何压缩图像并将其编码为文本?

使用Library chart.js在一个带有两个y轴的图表中绘制两个数据集

KeyboardEvent:检测到键具有打印的表示形式

CSS网格使页面自动滚动