【发布时间】:2019-03-24 21:31:08
【问题描述】:
假设我有一个看起来像这样的界面:
type RequestProps = "a" | "b" | "c"
interface Request {
props: RequestProps[];
}
以及一些接受请求并返回响应对象的代码:
declare function sendRequest(r: Request);
我想缩小r.props 的范围,以便我可以返回带有与请求的道具相对应的键的响应。也就是说,如果请求是由这样的用户发出的:
const request = {
props: ["a", "c"]
}
let response = sendRequest(request);
response 将自动完成 response.a 和 response.c 作为字符串值。类似于
type Response<T extends RequestProps[]> = { [key in T[number]]: string; }
我不希望请求创建者必须指示字符串文字 ("a" as "a") 或元组 (["a", "c"] as ["a", "c"]),我希望 sendRequest 能够根据上下文推断或提示或保护某种方式允许将类型缩小到数组包含的实际文字值,无论多么冗长(如果必须,我将缩小每个排列)。这可能吗?字符串枚举似乎与字符串文字有相同的问题。谢谢!
【问题讨论】:
标签: typescript