interface SomeInterface{
p1: string;
p2: number;
p3: ComplexType;
}
const x :SomeInterface = {
p1: 'test',
p2: 'test',
p3: {//something}
}
现在,有没有办法编写通用函数,如:
function foo<T>(parameter:T){
}
将使用object literal
调用{
...
}
但只允许SomeInterface
上存在的属性?它的重要性,并非所有属性都必须在字面上调用。可以通过以下方式拨打电话:
{
p1: 'only one'
}
但请致电:
{
propertyNotOnInterface: 'bla'
}
应该出现编译错误。
这样的事情可能吗?
答案 0 :(得分:2)
您可以使用Partial,如下所示:
function foo(parameter: Partial<SomeInterface>) {
...
}
然后这很好:
foo({
p1: 'only one'
});
但是这个:
foo({
propertyNotOnInterface: 'bla'
});
导致此错误:
类型'{propertyNotOnInterface:string; }'不能分配给'Partial'类型的参数。
对象文字只能指定已知属性,'Partial'类型中不存在'propertyNotOnInterface'。