我需要告诉我的函数entity
是object
(任何对象):
但如果我这样做:
export function processEntityTags(entity: object) {
entity.label;
}
它说property label doesn't exists on type object
。
此entity
变量可以有不同的属性,因此我无法实现entity
Interface
所以我的问题是,我如何告诉我的程序实体将是任何类型的对象?
答案 0 :(得分:1)
您可以使用索引签名定义具有类型any
的值的接口。
interface Itest{
[key: string]: any;
}
然后将接口作为参数的类型传递。这样,该函数只接受{}
作为输入参数,如下所示
export function processEntityTags(entity: Itest) {
entity.label;
}
const t = processEntityTags({label:5}); // no error
const t = processEntityTags(6);// error
工作演示:Playground
答案 1 :(得分:0)
虽然其他答案已经下去了创建一个接口的路径,该接口可能将任何属性定义为任何类型,但这样做会破坏使用打字稿的目的。
您说实体可能具有不同的属性,因此单个界面不起作用。每种类型的实体都必须具有一些共享属性,以允许它们传递到同一个函数中,以便您可以使用interface inheritance来正确键入它。
// Create a basic interface that has the label property
interface TaggableEntity{
label: string
}
// Extend the taggable interface
interface TypeAEntity extends TaggableEntity{
typea: string;
}
interface TypeBEntity extends TaggableEntity{
typeb: string;
}
// Accept a Taggable Entity
function processEntityTags(entity: TaggableEntity) {
entity.label; // Fine
entity.typea; // Not Fine, `typea` does not exist on `TaggableEntity`
}
const typea: TypeAEntity = {
typea: 'foo';
}
const typeb: TypeBEntity = {
typeb: 'bar';
}
// Although of different types both types inherit from the type accepted by the function.
processEntityTags(typea);
processEntityTags(typeb);