如何定义类型以检查对象是否包含ID键?

时间:2019-07-12 11:56:30

标签: typescript

是否可以定义一个接口,使其可以包含任意数量的键,但必须包含id键?

interface HasId{
   id: number
}

可以定义这样的内容,但是如果数据结构中还有另一个键,它将输出一个错误。

2 个答案:

答案 0 :(得分:3)

是的,实际上您需要创建一个字典类型。有关Advanced Types的更多信息。

interface HasId {
    id: number;
    [key: string]: number;
}

您还可以使其更通用,例如

interface IDictionary<T> {
    [key: string]: T;
}

interface HasId extends IDictionary<number> {
    id: number;
}

答案 1 :(得分:2)

是的,您可以将交集类型与原始类型和标准对象一起使用,例如:

interface HasId {
    id: number;
}

type AtLeastHasId = HasId & {[key: string]: number};

const test1: AtLeastHasId = { // Property "id" is missing
};

const test2: AtLeastHasId = { // Fine
    id: 123
};

const test3: AtLeastHasId = { // Fine
    id: 123,
    other: 456
};

Playground link