- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
简单描述:
这种类型在 TS 中是否可行? Exclude<number, 200 | 400>
(“除 200 或 400 之外的任何数字”)
我有以下用例。我有一个通用的响应类型:
type HttpResponse<Body = any, StatusCode = number> = {
body: Body
statusCode: StatusCode
}
我想使用状态码作为鉴别器:
// Succes
type SuccessResponse = HttpResponse<SomeType, 200>
// Known error
type ClientErrorResponse = HttpResponse<ClientError, 400>
// Anything else, generic error, issue is with the status code here.
type OtherErrorResponse = HttpResponse<GenericError, Exclude<number, 200 | 400>>
// The response type is a union of the above
type MyResponse = SuccessResponse | ClientErrorResponse | OtherErrorResponse
当我使用 MyResponse
类型,我想使用状态代码作为鉴别器,例如:
const response: MyResponse = ...
if(response.statusCode === 200) {
// response is inferred as SuccessResponse => body is inferred as SomeType
} else if(response.statusCode === 400) {
// response is inferred as ClientErrorResponse => body is inferred as ClientError
} else {
// response is inferred as OtherErrorResponse => body is inferred as GenericError
}
但是它不像这样工作 Exclude<number, 200 | 400>
与 number
相同.我该如何解决这个问题?是类型 "any number except 200 or 400"
typescript 可能吗?还有其他创造性的解决方案吗?
最佳答案
目前这是不可能的。
参见:https://github.com/microsoft/TypeScript/issues/15480
Exclude<number, 200 | 400>
不起作用,因为 typescript 只跟踪某物是什么,而从不跟踪它不是什么。为了从无限系列中排除某些值, typescript 必须生成一个包含每个可能值的联合,除了您希望排除的值。这将是无限长度的并集(因为无穷大减 2 等于无穷大)
也就是说,http 状态代码的列表实际上是有限的。所以最好的方法可能是创建所有可能值的并集并使用它:
type HTTPStatusCode = 100 | 101 | 102 | 103 | 200 | 201 | 202 | ...
现在应该可以正常工作了:
Exclude<HTTPStatusCode, 200 | 400>
关于Typescript 除 X 以外的任何数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68008673/
我已经坚持了好几天了……很抱歉遇到这样的问题,但是我只是F#本身的初学者。由于关于类型提供程序的讨论很多,所以我决定建立一个类型提供程序并撰写一篇有关它的论文。当我开始时,我不知道什么是类型提供程序。
我正在开发LAN项目唤醒功能,但是我想控制局域网中计算机是否打开。但是我不想使用ICMP或WMI(我的网络上有DC)。那么,对于此问题,是否还有其他选择,例如“套接字连接”,请检查特定端口是否正在使用
我们有一个旧的VB6应用程序,该应用程序使用Crystal Reports XI生成打印报告。我们已经通过经验发现,如果Crystal Reports打印引擎选择了错误版本的 usp10.dll (W
我正在尝试获取有效的 Android 权限列表。我知道 http://developer.android.com/reference/android/Manifest.permission.html
嗨,我是 nginx 的新手,我试图在我的服务器(运行 Ubuntu 4)上设置它,它已经运行了 apache。 所以在我 apt-get install 它之后,我尝试启动 nginx。然后我收到这
如何在VB 6中检查对象的类型-除了'TypeName'之外,是否还有其他方法,因为无法通过'TypeName'进行检查,我希望使用类似QuichWatch窗口的方法。 最佳答案 对于对象变量,请使用
我的 JSP 应用程序中有一个错误。发布后我的 session 被清除: YAHOO.util.Connect.asyncRequest('POST', Url, callback, post
我是一名优秀的程序员,十分优秀!