与keyof混淆

时间:2018-03-06 17:23:27

标签: typescript

为什么这段代码不会抛出任何错误:

interface X {
    a: string;
    b?: string;
}

type Y<T> = {
  [key in keyof T]: boolean;
}

class A<Definition> {
    constructor(public readonly definition: Definition, public readonly fields: Y<Definition>) {

    }
}

const y = {
    a: true,
    c: false
}


const a = new A<X>({a: 'first', b: 'second'}, y)

但这会引发错误吗?

interface X {
    a: string;
    b?: string;
}

type Y<T> = {
  [key in keyof T]: boolean;
}

const y: Y<X> = {
  a: true,
  c: false,
}

我希望有类似于第一个示例的内容会抛出错误,因为c不是X的关键字。

如果我在第一个示例中将Y<X>类型添加到y,则会出现编译错误。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用联合类型使第二个示例代码正常工作:

interface X {
    a: string;
    b?: string;
}

type Y<T> = {
  [key in keyof T]: boolean;
}

type Z = {
    c: boolean;
}

const y: Y<X> | Z = {
    a: true,
    c: false
}