typescript - 如何从对象中获取 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 无法确定计算字符串文字的值是什么。
使用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"
但得到了完全不同的东西。假设计算的值是什么是不安全的。
推荐阅读
- javascript - 在 Enzyme 中,如何允许窗口上可用的函数在构造函数中声明的变量上定义?
- postgresql - Setting up Celery with Postgres as broker - No such transport 'db'
- ios - In-App Purchases: Restoring Purchases Server Side
- tensorflow - 将 hub.text_embedding_column 与 tf.contrib.estimator.RNNClassifier 一起使用
- linker - 精灵加载器中的静态地址与执行地址
- r - Need to subset by excluding multiple values in a categorical variable
- angular - Angular - 如何通过组件将动态 SVG 插入 DOM
- angular - 如何防止在 RxJS 中执行延迟订阅回调?
- botframework - 在 FB Messenger 频道(BotFramework v3,Nodejs)中单击快速回复时获取字符串化对象而不是带有文本的字符串
- powershell - 将无聊的任务自动化