在Typescript中的对象文字中指定值的类型?

时间:2018-06-22 14:04:01

标签: typescript

这是一个与Type definition in object literal in TypeScript上的问题不同的问题

我有一个接受任何对象作为其属性之一的接口:

interface MyType {
  /* ... */
  options: any;
}

虽然属性options可以是任何东西,但有时我想指定某些类型。我不想使用'as'关键字,因为我不想强迫它(如果我缺少属性,我想看到错误)。

这是我可以做到的一种方法:

interface MyTypeOptions {
  hasName: boolean;
  hasValue: boolean;
}

// Declare the options separately just so we can specify a type
const options: MyTypeOptions = {
  hasName: false,
  hasValue: true
};

const myType: MyType = {
  /* ... */
  options
}

但是有一种方法可以在不使用类型断言的情况下将选项保持在myType对象文字内联内联的同时呢?换句话说,我想这样做:

const myType: MyType = {
  /* ... */
  // I want to type-check that the following value is of type MyTypeOptions
  options: {
    hasName: false,
    hasValue: true
  } 
}

1 个答案:

答案 0 :(得分:1)

您正在寻找泛型。您可以将MyType设为通用,并指定MyTypeOptions作为MyType

的类型参数
interface MyTypeOptions {
    hasName: boolean;
    hasValue: boolean;
}

// Declare the options separately just so we can specify a type
const options: MyTypeOptions = {
    hasName: false,
    hasValue: true
}

// We specify any as the default to T so we can also use MyType without a type parameter
interface MyType<T = any> {
    /* ... */
    options: T;
}
const myType: MyType<MyTypeOptions> = {
    options: {
        hasName: false,
        hasValue: true
    }
}