gpt4 book ai didi

javascript - Flowtype:接口(interface)不能与联合类型结合

转载 作者:行者123 更新时间:2023-11-30 19:24:43 25 4
gpt4 key购买 nike

这个例子使用了一个接口(interface)并抛出了一个错误(try this example):

// @flow

interface ExtraField {
note: string;
}

type Success = ExtraField & { success: true, value: boolean };
type Failed = { success: false, error: string };

type Response = Success | Failed;

function handleResponse(response: Response) {
if (response.success) {
var value: boolean = response.value;
} else {
var error: string = response.error; // Error!
}
}

错误是:

Cannot get `response.error` because: Either property `error` is missing in `ExtraField` [1]. Or property `error` is missing in object type [2]

注意事项:

  1. 当从 interface 切换到 type 时,错误消失了,即当编写 ExtraField 时:

    type ExtraField = {
    note: string
    }
  2. @AluanHaddad 发现了另外两个奇怪的东西(try the different cases here):

    • 当将 if (response.success) { 更改为 if (!!response.success) { 时,错误将保持。<
    • 但是当将 if (response.success) { 更改为 if (response.success === true) { 时,错误将消失.

我不太明白为什么 interface 在这里不起作用。错误很奇怪。 error 字段没有出现在 ExtraField 中。

最佳答案

Flow 中的交叉点类型似乎“严重损坏”(see this GitHub issue)。我认为如果使用对象类型传播,该示例应该会更好。

// @flow
interface ExtraField {
note: string,
}

type Success = { success: true, value: boolean };
type Failed = { ...ExtraField, success: false, error: string };

type Response = Success | Failed;

function handleResponse(response: Response) {
if (response.success) {
var value: boolean = response.value;
} else {
var error: string = response.error;
}
}

Try Flow

关于javascript - Flowtype:接口(interface)不能与联合类型结合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57046005/

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