gpt4 book ai didi

需要定义对象的任何一个属性的 Typescript 类型 : how?

转载 作者:搜寻专家 更新时间:2023-10-30 21:23:33 24 4
gpt4 key购买 nike

我有以下 TypeScript 代码:

interface qux {
foo?: string;
bar?: number | string;
}

function foobar(x: qux) { ...; something_frobz(x); ...; }

问题:我可以调用 foobar("hello, world"),即使这会导致 something_frobz 行为异常。我想在编译时使用字符串参数捕获并拒绝对 foobar 的调用,同时尽可能少地改变 qux 的结构。解决这个问题的最佳方法是什么?

我自己的解决方案是将一个字段设为必填;该字段具有合理的默认值,并且 AFAIK 字符串没有任何具有相同名称的字段。这有点像 hack,但它确实有效。

另一种方法可能是让 foobar 采用联合类型 first-field-is-required |需要第二个字段 | ... | hundredth-field-is-required,但随后我必须维护 qux 的 N 个几乎相同的副本(对于 N > 1)并且这永远不会顺利。

还有更好的吗?

最佳答案

typescript 版本 2.2 - 2.3

为了防止将“原语”作为参数传递,您可以要求它是一个对象:

function foobar(x: qux & object) { }

foobar(''); //error
foobar(1); //error
foobar({a:1}); //error

foobar({foo:'bar'}); //ok

Typescript version >= 2.4 不再需要 object 约束。有关详细信息,请参阅@dbandstra 的回答。

关于需要定义对象的任何一个属性的 Typescript 类型 : how?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44907943/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com