gpt4 book ai didi

typescript 类型 'never' : how to use for object fields?

转载 作者:行者123 更新时间:2023-12-05 04:44:23 26 4
gpt4 key购买 nike

我正在尝试获取 this examplethis一样工作:

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

type Explode<T> = keyof T extends infer K
? K extends unknown
? { [I in keyof T]: I extends K ? T[I] : never }
: never
: never;


type Test = Explode<Foo>;

const test: Test = {a: 1};

这给了我以下错误:

Type '{ a: number; }' is not assignable to type '{ a: number; b: never; c: never; } | { a: never; b: string; c: never; } | { a: never; b: never; c: boolean; }'.
Type '{ a: number; }' is missing the following properties from type '{ a: number; b: never; c: never; }': b, c

如何实例化类型为 Test 的对象而不会出现错误?我想要一个可以包含字段 abc 的类型(或者是一个空的 {}) .

最佳答案

我找到了解决方案。我需要像这样使 Foo 的字段可选:

已编辑以包含@apokryfos 的建议

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

现在我可以:

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

type AtMostOneOf<T> = keyof T extends infer K
? K extends unknown
? { [I in keyof T]+?: I extends K ? T[I] : never }
: never
: never;


type Test = AtMostOneOf<Foo>;

const test: Test = {a: 1}; // allowed
const test1: Test = {b: 'asd'}; // allowed
const test2: Test = {a: 1, b: 'asd'}; // not allowed
const test3: Test = {} // allowed

Playground

关于 typescript 类型 'never' : how to use for object fields?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69387906/

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