javascript - 我可以使用计算键定义 Typescript 接口吗?
问题描述
我想用计算键定义一个 Typescript 接口:
const NAMESPACE = 'com.pizza'
const KEY_SAUCE = `${NAMESPACE}/sauce`
const KEY_CRUST = `${NAMESPACE}/crust`
interface PizzaToken {
radius: number
[KEY_SAUCE]: Sauce
[KEY_CRUST]: Crust
}
const pizza: PizzaToken = PizzaFactory.getToken(...)
console.log(pizza[KEY_SAUCE])
这种设计模式给了我两个不相关的 Typescript 错误;首先,在界面上:
TS1169: A computed property name in an interface must refer to an
expression whose type is a literal type or a 'unique symbol' type.
第二个在pizza[KEY_SAUCE]
:
TS7053: Element implicitly has an 'any' type because expression of
type 'any' can't be used to index type 'Pizza'.
我可以通过一些解决方法(例如Symbol
)解决这些问题,但它们有点笨拙。做这样的事情的最佳方法是什么?
解决方案
您需要as const
在键声明处使用非扩展字符串文字类型:
const KEY_SAUCE = `${NAMESPACE}/sauce` as const;
const KEY_CRUST = `${NAMESPACE}/crust` as const;
推荐阅读
- git - Fedora 33 git pull 或 clone 不再工作和/或 ssh 密钥不再识别
- android - 使用 5 公里附近的查询(经度和纬度)查询 Firebase 实时数据库
- spring-boot - 为什么我会收到“权限被拒绝”?
- android - 在 logcat / chatty 相同的 1 行中将我的应用程序列入白名单
- jestjs - 开玩笑忽略赛普拉斯测试
- javascript - 在没有 makeStyles 的材料 ui 中使用来自主题的自定义样式
- c# - 如何自动完成 Visual Studio 代码?
- bash - 使用 bash 过滤不包含任何音频文件的文件夹
- reactjs - 转到另一个页面 - 使用按钮和链接做出反应
- android - NavigationDrawer 的意图