微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

是否可以通过Typescript中的映射类型将文字对象中的值而非键获取为文字,而不是其类型例如字符串?

如何解决是否可以通过Typescript中的映射类型将文字对象中的值而非键获取为文字,而不是其类型例如字符串?

下面,我有一个文字对象{a:“ a”}。我想将对象的值提取文字“ a”而不是其类型字符串,以便检查是否有其他变量是“ a”而不是其他任何字符串。

但是,如果我使用映射类型,我只会得到字符串,而不是“ a”。

是否可以将值作为类型获取

const a = {a:"a"}
type trueIfLiteral<T extends string>= string extends T?false:true;

type key = keyof typeof a;
const t1 : trueIfLiteral<key> = true; // key is literal

type val = typeof a[key];
const t2 : trueIfLiteral<val> = false; // val is string

所以问题很简单,我该如何派生类型:

type valAsLiteral = "a"

解决方法

首先,为了使对象稍微减少混乱,我们将其命名为obj,并使用属性keyval

const obj = { key: "val" };

这里的问题是该对象的类型为{ key: string }。 TypeScript已将'val''val'自动扩展为字符串。如果要防止扩展,可以声明对象as const

const obj = { key: "val" } as const;

这将使您的代码正常工作,并且

type val = typeof obj[key];

产生'val'(并且const t2 : trueIfLiteral<val> = false; // val is string失败,因为val不再是通用字符串,而只是val

要获取发出的JS中的值而不是TS中的值,您可以这样做

const val = Object.values(obj)[0];

产生'val',键入为'val',没有类型扩展。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。