首页 > 解决方案 > 如何从对象中获取 const 断言值

问题描述

const obj1 = {
    key1: 'val1',
    key2: 'val2'
} as const;

const obj2 = {
    key3: `${obj1.key1}-test`,
    key4: `${obj1.key2}-test`
} as const;

type MyType = typeof obj2.key3 | typeof obj2.key4

在这里,由于插值,MyType 变成string了类型而不是val1-test | val2-test类型。我应该怎么做才能在不重复值的情况下获得所需的类型?

标签: typescript

解决方案


TypeScript 无法确定计算字符串文字的值是什么。

使用as const断言将缩小obj1. 但是,TypeScript 不会尝试计算运行时结果obj2

请记住, const 断言纯粹是编译时特性。没有什么能阻止您在运行时覆盖这些值。考虑一下:

const obj1 = {
    key1: 'val1',
    key2: 'val2'
} as const;

Object.assign(obj1, { 'key1': '' });

const obj2 = {
    key3: `${obj1.key1}-test}`,
    key4: `${obj1.key2}-test`,
} as const;

console.log(obj2.key3); // "-test"

我们期待"val1-test"但得到了完全不同的东西。假设计算的值是什么是不安全的。


推荐阅读