javascript - 创建一个计算结果为字符串并且可以将其他字符串作为属性的构造
问题描述
我想使用适当的 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
如有必要,它也可以是绑定到父对象的属性。当我尝试使用 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`
然后我想从整个应用程序中导入这个模式来创建链接等。
解决方案
我希望我的构造在评估时返回一个字符串并具有属性
这是不可能的。计算结果为字符串的表达式返回字符串值,而字符串是原始值,而不是可以具有属性的对象。代理在这里无济于事,因为代理也始终是一个对象。
另请参阅扩展原语而不进行原型设计。
推荐阅读
- database - 如何从第一种形式的选定行中过滤另一种形式的表格?
- composer-php - 403 Forbidden 您无权访问此服务器上的 /drupal Drupal 8
- jquery - 如何解析具有重复节点的 XML?
- sql - 添加导致 GROUP BY 错误的聚合列
- javascript - PHP 为 D3 生成 JSON
- outlook-redemption - 调用outlook redemption 64位
- c# - 在 C# 中返回一个对象
- installation - 在代理后面安装 Tensorflow 时遇到问题
- python - 使用数据驱动页面时从图例中删除最后一个字符串值
- pysnmp - pysnmp getcmd 超时不起作用