【发布时间】:2021-06-18 10:28:12
【问题描述】:
我想使用适当的 TypeScript 类型制作特定的 JavaScript 构造
我希望我的构造:
- 求值时返回一个字符串
- 具有在评估时返回不同字符串的属性
与创建嵌套可调用函数的方式类似:
const fn = () => "foo"
fn.bar = () => "bar"
fn() // "foo"
fn.bar() // "bar"
类似
const foo = "foo";
foo.bar = "bar" // Unfortunately doesn't work
foo // "foo"
foo.bar // "bar"
type Foo = "foo" & { bar: "bar" }
如有必要,它也可以是绑定到父 Proxy 对象的属性。当我尝试使用代理实现它时,我遇到了无法区分来自 get 陷阱的浅 (proxy.foo) 和深 (proxy.foo.bar) 属性访问的问题:
const proxy = new Proxy({}, {
get: (target, prop) => {
// prop is "foo" for both `proxy.foo` and `proxy.foo.bar` accesses,
// presumably because they are two separate property access operations
// `proxy.foo.bar` = `(proxy.foo).bar`
}
}
甚至可以在 JavaScript 中进行这样的构造吗?
并且可以在TS中输入吗?
编辑:描述我的用例
我希望它创建一个架构,将我网站的语义部分映射到它们各自的 url:
const urlSchema = someMagic();
urlSchema.settings // `/settings`
urlSchema.settings.personal // `/settings/personal`
然后我想从整个应用程序中导入此架构以创建链接等。
【问题讨论】:
-
你想使用这个构造的actual problem是什么?
-
@Bergi :嘿,我添加了编辑我的帖子以包含用例。感谢您的宝贵时间。
-
不可能。但是您可以轻松地使
urlSchema.settings返回一个对象,当在String(urlSchema.settings)中使用时,该对象的计算结果为字符串/settings。
标签: javascript typescript proxy properties