小编Hen*_*rra的帖子

从 typeguard 的类型谓词获取类型

通常,类型保护的类型定义如下:

(value: unknown) => value is Type
Run Code Online (Sandbox Code Playgroud)

其中突出显示的部分被文档称为类型谓词

(value: unknown) => **value is Type**
Run Code Online (Sandbox Code Playgroud)

甚至更进一步,我们可以说(我不知道文档是如何定义这一点的)是valuetypeguard 的参数is是用于定义类型谓词的 TypeScript 二元运算/关键字,并且Type是 typeguard 实际保证的类型,保证型。由于我们使用类型保护来保证值的类型,因此我们可以说这Type是定义中最有趣的部分。

既然如此,是否可以Type从类型保护的类型定义中提取出来?如何?

我在想这样的事情:

type Type = typeof typeguard; // (value: unknown) => value is Type
type TypePredicate = TypePredicateOf<Type>; // value is Type
type GuaranteedType = IsOf<TypePredicate>; // Type
Run Code Online (Sandbox Code Playgroud)

GuaranteedType想要的结果在哪里。


谷歌搜索后,我只找到了有关通用类型保护类型定义的答案,但没有找到如何Type从中获取该部分。

typescript typeguards

10
推荐指数
1
解决办法
594
查看次数

`Proxy` 混淆了 `this[toString]` 和 `this[Symbol.toStringTag]`

它只发生在#toString, 并且只有当我(尝试)通过missingMethod-like访问它时trap

我有一个工厂createIterface,它返回一个Proxy具有大量方法的对象。在这些方法中,我有#toString()#id()#id返回interface与调用者具有相同属性的 并且工作正常;#toString应该将 my 转换interface为字符串,但它失败了。Allinterface的方法——包括#id#toString——都在一个#Symbol.for("__methods")属性中。我这样做是为了调试的目的:

const __methods = Symbol.for("__methods");

const missingMethod = ({
    get: (obj, prop) => Reflect.has(obj, prop)
        ? Reflect.get(obj, prop)
        : Reflect.has(obj[__methods], prop)
            ? Reflect.get(obj[__methods], prop)
            : console.log(`No #${prop} property exists.`)
});

const createInterface = (...props) => new Proxy({
    ...props,
    [__methods]: {
        id: () => createInterface (...props), …
Run Code Online (Sandbox Code Playgroud)

javascript symbols google-chrome tostring proxy-pattern

3
推荐指数
1
解决办法
353
查看次数