问题标签 [typeguards]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
40 浏览

typescript - 使用对象解构过滤以删除打字稿中未定义的项目

我想在仍然使用类型保护的同时使用对象解构。但是,在过滤掉未定义的对象键后,打字稿仍然推断出未定义的类型。

我不想使用非空断言,因为我们的 linter 会抱怨。

例如:

Typescript 的 requiredKey 类型仍然为 string | 在地图函数中未定义。

0 投票
1 回答
26 浏览

typescript - 如何检查 Typescript 中的参数类型?

如果提供了正确类型的对象作为参数,我如何检查函数内部?查看我的示例代码

在上面的代码中,如何检查参数m实际上是 type Array<replacementMap>

0 投票
1 回答
221 浏览

typescript - 数组元素类型的用户定义类型保护

我正在尝试编写一个用户定义的类型保护来检查数组元素的类型。

这就是我所拥有的:

所以我可以这样称呼它

这检查 arg 是一个字符串数组。

我也可以这样使用它:

现在,它正在检查一个数组(string[]number[]这里)。但问题在于可以使用随机泛型类型调用类型保护,例如Boolean导致奇怪的行为。

所以我选择了这个功能:

所以现在,类型保护有一个约束。如果我这样称呼它:

如果第一个泛型类型不是 arg 类型之一,我将遇到错误。这就引出了一个新问题。

在这种情况下,我会遇到错误,因为string它不是 arg 类型的一部分。

所以我必须提出问题:

  • 有没有办法修复第二个泛型 ( typeof arg) ?如果它是硬编码的,并且用户不必每次使用类型保护时都提供它,那就太好了
  • 有没有办法说,“这个泛型必须是作为参数传递的数组元素的类型”。例如string | number,如果isArray使用类型参数调用number[] | string[]
0 投票
1 回答
29 浏览

typescript - 类型不是使用类型保护从函数中缩小的

我有一个函数,它接受类似结构的参数,并且在函数内部使用类型保护来确定传入参数的类型。

在我的实际应用中,返回了一个不同类型的复杂对象,但在这个例子中,我只是返回了同一个对象。

当我执行该功能

在我的 IDE 中,我可以看到 TSexample在以下块中正确理解了这一点

是正确的类型

(参数)示例:Ex1

您可以看到分配给的对象example是从函数返回的,在这种情况下分配给test

然而,尽管理解了返回块中的正确类型,但 Typscript 并没有将其分配test为 typeEx1而是将其分配为更广泛的 type Ex

这意味着以下会引发错误

类型“Ex”上不存在属性“param1”。

类型保护仅在当前执行块中有用还是我误解了它们的使用?

0 投票
1 回答
6899 浏览

python - 无法从“typing_extensions”导入名称“TypeGuard”

我是 Python 新手,发现 swmmtoolbox 包出现以下错误。我非常感谢您的评论。谢谢

回溯(最近一次通话最后):

在处理上述异常的过程中,又出现了一个异常:Traceback(最近一次调用last):

0 投票
3 回答
73 浏览

javascript - typescript,检查对象的类型,typeof得到编译错误

使用此代码

获取编译错误信息:
类型 'string | HTMLElement' 不能分配给类型 'HTMLElement'。类型“字符串”不可分配给类型“HTMLElement”.ts(2322)

更改代码如下,不会得到错误信息:

我很困惑,他们应该都得到错误或者都得到工作。

0 投票
1 回答
43 浏览

typescript - 类型保护是否仅在返回 true 时缩小类型?

我的印象是,一个接受多种类型的类型守卫instanceOfA(arg: A | B | C): arg is A会将类型缩小为A(当守卫返回时true)或B | C(当守卫返回时false

但是在下面的情况instanceOfB下,返回false似乎将类型缩小到never,而true根本不会缩小它。类型保护实际上是否仅在true返回时缩小类型?还是我误解了结果,在这种情况下,为什么会never发生缩小?

0 投票
0 回答
28 浏览

typescript - 根据 TypeScript 中异步或同步的输入函数确定函数的类型安全返回值

我目前正在做一个项目,遇到了一个我很难解决的问题。我的目标是开发一个以函数为参数的函数。然后这个函数将被包装到另一个函数中,以在我的自定义类中返回它的返回值,然后这个函数将被返回。(复杂的笑)

现在,我想推进该函数以便能够正确解析异步函数,以便我可以在返回的函数上使用 await 而不是类中的返回值。

我的主要问题是创建一个正确的 isAsync 类型保护的函数。我尝试了一些可能的解决方案,但没有一个以 TypeScript 喜欢的方式工作。

我很高兴能得到任何帮助,谢谢:)

0 投票
1 回答
26 浏览

typescript - 在不必声明临时类型保护函数的情况下缩小类型?

说,我有一个这样的课程,TypeScript 对此并不满意:

解决此问题的官方方法似乎是使用临时类型缩小功能:

在某些情况下,这样的运行时检查是多余的。例如,当使用类型不佳的第三方库时,我不想在运行时测试库并编写所有样板代码。

相反,我想把它写得尽可能短。

到目前为止,我最好的尝试是使用as类型转换将变量重新分配给另一个变量:

但我不需要那个变量!我只需要 TypeScript 静态地知道类型,我不想声明任何运行时变量或 if 子句或抛出的错误。

我正在成像这样的东西:

我只想让 TypeScript 静态地知道在代码中这个变量/属性肯定是特定类型的。我怎么做?


对我不起作用的解决方案:

  1. 键入animal属性为Duck

    这个解决方案对于我的简单示例来说是最合理的,但这只是我想出的一个最小的人工示例。

    想象一下,这个类比这Foo更复杂:this.anmial被多次使用,而且大多数时候它可以是任何Animal. 只有在代码中的这个特定点,它才能确定是鸭子。

  2. 使用内联类型转换:(this.animal as unknown as Duck).quack().

    这行得通,但是当你需要对这种动物做不止一件鸭子的事情时,这种方法会变得很烦人:

  3. 修复第三方库的类型。假设打字真的很复杂,而您没有能力深入研究它们。

0 投票
2 回答
269 浏览

python - Python 中的类型检查内联类型提示

目前我typeguard.typechecked用来装饰我的功能并检查重要功能的输入和输出。

但是,如果我想检查来自我无法控制的函数的类型,以及当类型不是我想要的类型时出错怎么办?

有没有办法做到这一点?当然可以使用装饰器来实现ast.

我知道我可以assert isinstance或类似的东西,但自动隐式方法会好得多。

编辑:

作为对使用键入信息包装方法的建议的回应,我将分享我的实际用例。

torchtyping用来记录和确保我的 PyTorch 张量的形状。

在这种情况下,我需要明确检查张量的类型,并且如果我使用过keepdim=False或一些不同的dim. 它还需要简短,以便我可以将其用作文档以及捕获真正发生的错误。