gpt4 book ai didi

typescript - 定义接口(interface) : object with unknown number and name of properties

转载 作者:行者123 更新时间:2023-12-04 02:56:09 25 4
gpt4 key购买 nike

我有一个对象 foo

interface Foo {
fooId: string;
otherStuff: any;
}

现在我有一个对象 fooCollection,它是一个包含未定义数量的 foo 的对象。每个属性都是一个等于 fooId 的字符串。如何为 fooCollection 定义一个准确的接口(interface)?

到目前为止,我想出了这个:
interface FooCollection {
[key: string]: Foo;
}

- 我怎么能告诉 ts 属性(property)的数量可以是任何东西?

-我可以更准确地了解 Prop 名称,说它是 fooId 而不是任何字符串?

最佳答案

索引签名[key: string]: Foo已经允许任意数量的属性(零个或多个)。

编写单一类型,强制每个属性的名称与 fooId 匹配。的Foo object 超出了 TypeScript 类型系统的能力。你可以写一个 FooCollection在使用的 ID 集中通用的类型,这将允许您编写通用函数来验证手写 FooCollection文字:

interface Foo<Id extends string> {
fooId: Id;
otherStuff: any;
}

type FooCollection<Ids extends string> = { [Id in Ids]: Foo<Id> };

function checkFooCollection<Ids extends string>
(fooCollection: FooCollection<Ids>) {
return fooCollection;
}

// OK
let c1 = checkFooCollection({
a: {fooId: "a", otherStuff: 5}
});

// Error
let c2 = checkFooCollection({
a: {fooId: "b", otherStuff: 5}
});

但是,如果您正在构建 FooCollection对象在运行时,这种方法不太可能为您提供比原始方法更有意义的检查。

关于typescript - 定义接口(interface) : object with unknown number and name of properties,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53061831/

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