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

在Typescript的对象文字中指定值的类型?,typescript,Typescript,这是一个与现在不同的问题 我有一个接口,它接受任何对象作为其属性之一: interface MyType { /* ... */ options: any; } 虽然属性options可以是任何内容,但有时我想指定某些类型。我不想使用'as'关键字,因为我不想强制使用它(如果缺少属性,我想看到错误) 我有一种方法可以做到: interface MyTypeOptions { hasName: boolean; hasValue: boolean; } // Declare t

这是一个与现在不同的问题

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

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
  } 
}

您正在寻找泛型。您可以将
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
    }
}
接口MyTypeOptions{
hasName:boolean;
hasValue:布尔值;
}
//单独声明选项,以便指定类型
常量选项:MyTypeOptions={
hasName:false,
hasValue:对
}
//我们将any指定为T的默认值,这样我们也可以在不使用类型参数的情况下使用MyType
接口MyType{
/* ... */
选项:T;
}
常量myType:myType={
选项:{
hasName:false,
hasValue:对
}
}