仅使用已知类型的属性键入文字

时间:2017-08-17 09:45:42

标签: typescript

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'
}

应该出现编译错误。

这样的事情可能吗?

1 个答案:

答案 0 :(得分:2)

您可以使用Partial,如下所示:

function foo(parameter: Partial<SomeInterface>) {
    ...
}

然后这很好:

foo({
    p1: 'only one'
});

但是这个:

foo({
    propertyNotOnInterface: 'bla'
});

导致此错误:

  

类型'{propertyNotOnInterface:string; }'不能分配给'Partial'类型的参数。
   对象文字只能指定已知属性,'Partial'类型中不存在'propertyNotOnInterface'。