typescript - 对象冻结文字对象类型
问题描述
给定一些冻结的对象:
const obj = Object.freeze({a: 1, b:2});
它的类型是Readonly<{a:number, b:number}>
,有没有办法定义它,以便它的类型是Readonly<{a:1, b:2}>
,而不诉诸强制转换?
我想要这个的原因是,我想使用值类型来缩小另一个函数的输入,例如:function foo(input: 1 | 2)
解决方案
function l<T extends number>(p: T ): T {
return p;
}
const c = { a: l(1), b: l(2) };
// const fc: Readonly<{ a: 1; b: 2; }>
const fc = Object.freeze(c);
或者
function lc<T extends number>(p: { [k: string]: T }) : { [k: string]: T } {
return p;
}
// const t1: { [k: string]: 1 | 2 | 3; }
const t1 = lc({ a: 1, b: 2, c: 3 });
推荐阅读
- google-sheets - 谷歌表格中的条件替换
- javascript - 使用 javascript adn prisma 从 mysql 数据库填充 sqlite 数据库
- mongodb - 在没有 for 循环的情况下更新多个文档 MongoDB
- puppet - fqdn 的 Puppet fact 不返回完全限定的域名
- svn - 无法与 Windows 服务器上的存储库连接,可能我需要身份验证?
- javascript - 使用节点 js 在 mongodb 中可选地向模式添加数据
- linux - 在 apache 上找不到 Ubuntu 20.04 laravel 子目录
- python - 定位 tkinter 小部件时遇到问题
- javascript - React JS autoComplete =“off”不起作用---Chrome
- powershell - PowerShell 高级函数-参数绑定