我有一个接口I
,目标是确保val
的属性类型与fn
的返回类型相同。
有问题的类型限制为string
或number
。
interface I<T extends string | number> {
val: T;
fn: () => T;
}
const x1: I<string> = {
val: "hello",
fn: () => "world",
};
const x2: I<number> = {
val: 3,
fn: () => 4,
};
有没有可能不需要显式地设置T
,而是通过推理来设置它?这样我就可以:
// accepted
const x1: I = {
val: "hello",
fn: () => "world",
};
// accepted
const x2: I = {
val: 3,
fn: () => 4,
};
// rejected
const x3: I = {
val: "hello",
fn: () => 4,
};
// rejected
const x4: I = {
val: 3,
fn: () => "world",
};
1条答案
按热度按时间p5cysglq1#
据我所知,TS不可能为你的例子推断出类型。但是,有一种方法可以使用helper函数来达到类似的效果:
Playground链接