typescript - 使用点符号正确键入对对象嵌套键的访问
问题描述
好的,所以我在这里有这个界面:
interface IConfig {
git: {
cloneMethod: 'ssh'|'https'
},
terminal: {
level: 'log'|'etc',
beforeEach: {
consoleClear: boolean
},
consoleMode: 'extended' | 'simple'
}
}
我想创建一个访问器函数,就像Rambda 的 path一样,但输入正确,在自动完成中显示所有可能的选项,并返回预期值。
我的函数的使用示例:
access('terminal.beforeEach.console.Clear') // 'log'|'etc'
access('git.cloneMethod') // 'ssh'|'https'
我认为这在 Typescript 4.1 中是可能的,所以我尝试了一些方法,最接近我想要的方法是:
type Join<A extends string, B> = B extends string ? `${A}.${B}` : A;
export interface IAccesor {
<A extends keyof IConfig>(key: A): IConfig[A];
<A extends keyof IConfig, B extends keyof IConfig[A]>(key: Join<A, B>): IConfig[A][B];
<A extends keyof IConfig, B extends keyof IConfig[A], C extends keyof IConfig[A][B]>(key: Join<Join<A, B>, C>): IConfig[A][B][C];
}
但是出现了一些错误...
const accessor: IAccesor = {} as any;
accessor('git') // IConfig['git'];
accessor('git.cloneMethod') // 'https'|'ssh'
accessor('terminal') // IConfig['terminal'];
accessor('terminal.beforeEach.consoleClear') // Error
accessor('terminal.lev') // Error (expected)
accessor('terminal.level') // "log" | "etc"
我有点迷失了现在该做什么......
解决方案
推荐阅读
- sql - 无法连接到 sql server:SQL server 实例失败。(系统.数据)
- android - 如何修复更新小部件的 ANR 错误
- ios - Swift UIImage全屏
- c# - 如何在 EF 6 Code First 中为经典 .NET 使用 SQL Server JSON_VALUE 函数
- node.js - 从 Node.js 应用程序而不是网站使用 FormData 调用“PostFiles”端点
- php - 如何使用 Botman.io 创建松弛对话框
- c# - FsCheck。对象与模型的区别
- ios - iOS > 8 中 TabBarVC 上的透明 vc
- heroku - Elixir POST 文件到 Heroku 文件附件扫描仪插件
- join - 在多个键上加入 clojure 集