当前位置: 首页 > 知识库问答 >
问题:

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

祁默
2023-03-14

这是一个不同于TypeScript中对象字面量中的类型定义的问题

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

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

虽然属性选项可以是任何东西,但有时我想指定某些类型。我不想使用'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个答案

熊烨
2023-03-14

你正在寻找仿制药。您可以使MyType泛型,并将MyTypeOptions指定为 的类型参数

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
    }
}
 类似资料: