gpt4 book ai didi

typescript - 如何断言一个受歧视的联合是 typescript 单元测试中的某个变体?

转载 作者:行者123 更新时间:2023-12-05 03:58:28 26 4
gpt4 key购买 nike

我正在尝试使用 jest 在 typescript 中编写单元测试。

// This is how foo() is defined:
// function foo():
// {status: "OK"} |
{status: "ERROR", reason: "INVALID_ID"|"SOME_OTHER_ERROR"};

let res = foo();
expect(res.status).toEqual("ERROR");
expect(res.reason).toEqual("INVALID_ID");
// ^^^ this line gives error TS2339: Property 'reason' does not exist on type ....

typescript 是否有一些像 assert(res.status == "ERROR") 这样的结构,编译器可以在这之后找出结果是这里的第二个变体?

如果没有,是否有任何其他单元测试框架在其 expect() 之类的函数中为编译器提供必要的提示?

或者是否有更好的方法从 foo() 返回错误?

最佳答案

在您的情况下,您可以只使用简单的类型断言。

// Store the type for convenience.
type ErrorResponse = {status: "ERROR", reason: "INVALID_ID"|"SOME_OTHER_ERROR"}


let res = foo();
expect((res as ErrorResponse).reason).toEqual("INVALID_ID");

在更高级的场景中,您可能希望使用 type guard .

type OkResponse = {status: "OK"}
type ErrorResponse = {status: "ERROR", reason: "INVALID_ID"|"SOME_OTHER_ERROR"};

function isErrorResponse(response: OkResponse | ErrorResponse): response is ErrorResponse {
return response.status === "ERROR"
}

关于typescript - 如何断言一个受歧视的联合是 typescript 单元测试中的某个变体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57917832/

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