在typescript中,我想在一个对象上运行一些代码,我知道它有两个属性,includeUnassignedLocations
和contractStatusCodes
(类型为KnockoutObservable<boolean>
和KnockoutObservableArray<number>
分别)。可以使用各种不同的类,但我不想让它们都实现一个接口,因为它们彼此之间完全不同。有没有办法让typescript检查传入方法的任何对象是否具有这些属性?
答案 0 :(得分:2)
是的,您可以使用对象文字表示法指定类型,而不是接口。如果getMyObject()
的结果没有这两个属性,或者属性本身的类型错误,则以下代码将给出一个打字稿错误。
var myObject: {
//this can be any type which implements these properties
includeUnassignedLocations: KnockoutObservable<boolean>,
contractStatusCodes: KnockoutObservableArray<number>;
};
myObject = getMyObject();
//do something with myObject here, safe in the knowledge it has those two properties
答案 1 :(得分:1)
实际上你可以依赖于对象的隐式接口。
我们假设您有一个名为MyKnockoutClass
的小组,其中包含includeUnassignedLocations
和contractStatusCodes
。您还使用这两个属性定义了MyKnockoutInterface
。即使该类没有明确地实现接口,它仍然隐式地实现它。因此,任何需要MyKnockoutInterface
类型的内容都适用于MyKnockoutClass
。
class MyKnockoutClass {
includeUnassignedLocations: KnockoutObservable<boolean>;
contractStatusCodes: KnockoutObservableArray<number>;
}
interface MyKnockoutInterface {
includeUnassignedLocations: KnockoutObservable<boolean>;
contractStatusCodes: KnockoutObservableArray<number>;
}
function doSomething(object: MyKnockoutInterface) {
}
var object = new MyKnockoutClass();
doSomething(object);