【发布时间】:2021-08-26 09:57:46
【问题描述】:
给定一些接口
例如
interface Person {
name: string;
age: number ;
}
我想创建一个接受以下参数的通用函数
const res = Result.combineValues<Person>(
{ age: 18 },
{ name: 'John Doe' }
);
目前为止
class Result<T> {
readonly value: T;
private constructor(value: T) {
this.value = value;
}
public static combineValues<T>(...results: { [key in keyof T]?: Result<T[key]> | T[key] }[]): Result<T> {
let value: T;
// ... compute value
return new Result<T>(value);
}
}
但问题是它允许未定义的值
const res = Result.combineValues<Person>(
{ age: undefined }, // this should give a compile error because age should be a number or Result<number>
{ name: 'John Doe' }
);
并且它不会验证所有属性都已定义
const res = Result.combineValues<Person>(
{ age: 18 }
// should give a compile error because `{name: 'Some Name'}` is missing from argument list
);
【问题讨论】:
标签: typescript typescript-generics