gpt4 book ai didi

typescript - 如何从类型中排除索引签名?

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

<分区>

如果我按如下方式定义我的类型,它会遵循我想要的行为。

interface Foo {}

interface Bar {
a: string;
b: boolean;
c: Foo;
}

type x = keyof Bar; // "a" | "b" | "c"

但是,如果我尝试添加索引签名,它会丢失我所有的预定义成员。

interface Bar {
[index: string]: any;
}

type x = keyof Bar; // string | number

有没有办法在 TypeScript 中正确执行此操作?

类似于:

type x = Exclude<Bar, { [index: string]: any }>; // never

编辑我尝试了类似于 Jake 的解决方案并得到了这个:

interface Indexable<T> {
[index: string]: any;
}
type BaseType<T> = T extends Indexable<infer U> ? U : never;

interface BaseFoo {
Name: string;
}
interface Foo1 extends Indexable<BaseFoo> {}
type Foo2 = Indexable<BaseFoo>;

type base1 = BaseType<Foo1>; // {}
type base2 = BaseType<Foo2>; // BaseFoo

Foo1不起作用,由于某种原因,它的类型信息变为 {} . Foo2 确实有效,但智能感知不会说 Foo2对于 Foo2 类型的变量.相反,他们有 Indexable<BaseFoo> .

我真的很想尝试对我的用户隐藏这种类型的按摩。不幸的是,要求他们从 Indexable<T> 来回转换是不可行的至 T .

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