可分配给类型“never”的类型

types that are assignable to type 'never'

提问人:Sabo Boz 提问时间:11/12/2023 最后编辑:Sabo Boz 更新时间:11/12/2023 访问量:28

问:

在下面的示例中,有没有人知道如何编写变量以使其符合给定的接口(因此我们不必更改接口)?现在我收到一个错误说fieldType '{ accountId: string; active: true; }[]' is not assignable to type 'never'.

interface Fields {
    votes: Votes & {
        voters: never;
    };
}

interface Votes {
    self: string;
    votes: number;
    hasVoted: boolean;
    voters: User[];
}

interface User {
    accountId: string;
    active: boolean;
}

const field: Fields = {
    votes: {
        self: "self",
        votes: 0,
        hasVoted: false,
        voters: [
            {
                accountId: "accountId",
                active: true,
            },
        ],
    },
};
TypeScript 接口

评论

1赞 Sabo Boz 11/12/2023
是的,这是正确的 - 我会更新问题
0赞 T.J. Crowder 11/12/2023
对他们来说,使用多么奇怪的类型......我怀疑是我不熟悉的 TypeScript 成语。:-)
0赞 Behemoth 11/12/2023
疯狂的猜测:也许这段代码是 TypeScript 3.5 之前的,而 Omit 实用程序类型尚不可用。所以有人只是将属性设置为使用 1.6 中引入的交叉点类型never

答:

2赞 T.J. Crowder 11/12/2023 #1

没有任何东西可以分配给 never,因此您必须使用类型断言来强制它。例如:

const fields: Fields = {
    votes: {
        self: "self",
        votes: 0,
        hasVoted: false,
        voters: [
            {
                accountId: "accountId",
                active: true,
            },
        ] as Fields["votes"]["voters"], // <=============
    },
};

游乐场链接