问题标签 [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.
typescript - 使用对象解构过滤以删除打字稿中未定义的项目
我想在仍然使用类型保护的同时使用对象解构。但是,在过滤掉未定义的对象键后,打字稿仍然推断出未定义的类型。
我不想使用非空断言,因为我们的 linter 会抱怨。
例如:
Typescript 的 requiredKey 类型仍然为 string | 在地图函数中未定义。
typescript - 如何检查 Typescript 中的参数类型?
如果提供了正确类型的对象作为参数,我如何检查函数内部?查看我的示例代码
在上面的代码中,如何检查参数m
实际上是 type Array<replacementMap>
?
typescript - 数组元素类型的用户定义类型保护
我正在尝试编写一个用户定义的类型保护来检查数组元素的类型。
这就是我所拥有的:
所以我可以这样称呼它
这检查 arg 是一个字符串数组。
我也可以这样使用它:
现在,它正在检查一个数组(string[]
或number[]
这里)。但问题在于可以使用随机泛型类型调用类型保护,例如Boolean
导致奇怪的行为。
所以我选择了这个功能:
所以现在,类型保护有一个约束。如果我这样称呼它:
如果第一个泛型类型不是 arg 类型之一,我将遇到错误。这就引出了一个新问题。
在这种情况下,我会遇到错误,因为string
它不是 arg 类型的一部分。
所以我必须提出问题:
- 有没有办法修复第二个泛型 (
typeof arg
) ?如果它是硬编码的,并且用户不必每次使用类型保护时都提供它,那就太好了 - 有没有办法说,“这个泛型必须是作为参数传递的数组元素的类型”。例如
string | number
,如果isArray
使用类型参数调用number[] | string[]
typescript - 类型不是使用类型保护从函数中缩小的
我有一个函数,它接受类似结构的参数,并且在函数内部使用类型保护来确定传入参数的类型。
在我的实际应用中,返回了一个不同类型的复杂对象,但在这个例子中,我只是返回了同一个对象。
当我执行该功能
在我的 IDE 中,我可以看到 TSexample
在以下块中正确理解了这一点
是正确的类型
(参数)示例:Ex1
您可以看到分配给的对象example
是从函数返回的,在这种情况下分配给test
。
然而,尽管理解了返回块中的正确类型,但 Typscript 并没有将其分配test
为 typeEx1
而是将其分配为更广泛的 type Ex
。
这意味着以下会引发错误
类型“Ex”上不存在属性“param1”。
类型保护仅在当前执行块中有用还是我误解了它们的使用?
python - 无法从“typing_extensions”导入名称“TypeGuard”
我是 Python 新手,发现 swmmtoolbox 包出现以下错误。我非常感谢您的评论。谢谢
回溯(最近一次通话最后):
在处理上述异常的过程中,又出现了一个异常:Traceback(最近一次调用last):
javascript - typescript,检查对象的类型,typeof得到编译错误
使用此代码
获取编译错误信息:
类型 'string | HTMLElement' 不能分配给类型 'HTMLElement'。类型“字符串”不可分配给类型“HTMLElement”.ts(2322)
更改代码如下,不会得到错误信息:
我很困惑,他们应该都得到错误或者都得到工作。
typescript - 类型保护是否仅在返回 true 时缩小类型?
我的印象是,一个接受多种类型的类型守卫instanceOfA(arg: A | B | C): arg is A
会将类型缩小为A
(当守卫返回时true
)或B | C
(当守卫返回时false
)
但是在下面的情况instanceOfB
下,返回false
似乎将类型缩小到never
,而true
根本不会缩小它。类型保护实际上是否仅在true
返回时缩小类型?还是我误解了结果,在这种情况下,为什么会never
发生缩小?
typescript - 根据 TypeScript 中异步或同步的输入函数确定函数的类型安全返回值
我目前正在做一个项目,遇到了一个我很难解决的问题。我的目标是开发一个以函数为参数的函数。然后这个函数将被包装到另一个函数中,以在我的自定义类中返回它的返回值,然后这个函数将被返回。(复杂的笑)
现在,我想推进该函数以便能够正确解析异步函数,以便我可以在返回的函数上使用 await 而不是类中的返回值。
我的主要问题是创建一个正确的 isAsync 类型保护的函数。我尝试了一些可能的解决方案,但没有一个以 TypeScript 喜欢的方式工作。
我很高兴能得到任何帮助,谢谢:)
typescript - 在不必声明临时类型保护函数的情况下缩小类型?
说,我有一个这样的课程,TypeScript 对此并不满意:
解决此问题的官方方法似乎是使用临时类型缩小功能:
在某些情况下,这样的运行时检查是多余的。例如,当使用类型不佳的第三方库时,我不想在运行时测试库并编写所有样板代码。
相反,我想把它写得尽可能短。
到目前为止,我最好的尝试是使用as
类型转换将变量重新分配给另一个变量:
但我不需要那个变量!我只需要 TypeScript 静态地知道类型,我不想声明任何运行时变量或 if 子句或抛出的错误。
我正在成像这样的东西:
我只想让 TypeScript 静态地知道在代码中这个变量/属性肯定是特定类型的。我怎么做?
对我不起作用的解决方案:
键入
animal
属性为Duck
:这个解决方案对于我的简单示例来说是最合理的,但这只是我想出的一个最小的人工示例。
想象一下,这个类比这
Foo
更复杂:this.anmial
被多次使用,而且大多数时候它可以是任何Animal
. 只有在代码中的这个特定点,它才能确定是鸭子。使用内联类型转换:
(this.animal as unknown as Duck).quack()
.这行得通,但是当你需要对这种动物做不止一件鸭子的事情时,这种方法会变得很烦人:
修复第三方库的类型。假设打字真的很复杂,而您没有能力深入研究它们。
python - Python 中的类型检查内联类型提示
目前我typeguard.typechecked
用来装饰我的功能并检查重要功能的输入和输出。
但是,如果我想检查来自我无法控制的函数的类型,以及当类型不是我想要的类型时出错怎么办?
有没有办法做到这一点?当然可以使用装饰器来实现ast
.
我知道我可以assert
isinstance
或类似的东西,但自动隐式方法会好得多。
编辑:
作为对使用键入信息包装方法的建议的回应,我将分享我的实际用例。
我torchtyping
用来记录和确保我的 PyTorch 张量的形状。
在这种情况下,我需要明确检查张量的类型,并且如果我使用过keepdim=False
或一些不同的dim
. 它还需要简短,以便我可以将其用作文档以及捕获真正发生的错误。