Typescript 为类型或返回类型的函数编写接口

Typescript 为类型或返回类型的函数编写接口,typescript,typescript-types,dynamic-values,Typescript,Typescript Types,Dynamic Values,我有一个包含一些默认配置的对象。它的一些值不能静态定义,需要在运行时计算。要将这些默认值应用于对象,我将应用任何静态值,并执行和应用任何函数的返回 const设置={ prop1:没错, prop2:(config:config):布尔=>config.prop2, prop3:(config:config):number=>config.prop2, prop4:0, }作为默认设置 为此对象编写接口是困难的。任何给定的属性都可以是静态值或返回值的函数。我希望接口能够表示这种类型的多个对象,

我有一个包含一些默认配置的对象。它的一些值不能静态定义,需要在运行时计算。要将这些默认值应用于对象,我将应用任何静态值,并执行和应用任何函数的返回

const设置={
prop1:没错,
prop2:(config:config):布尔=>config.prop2,
prop3:(config:config):number=>config.prop2,
prop4:0,
}作为默认设置
为此对象编写接口是困难的。任何给定的属性都可以是静态值或返回值的函数。我希望接口能够表示这种类型的多个对象,其中属性名称和属性类型相同,但任何属性都可以是值或函数

interface DefaultSettings {
  prop1: boolean
  prop2: boolean
  prop3: number
  prop4: number
}
上面的接口假设所有属性都是静态值,这是不正确的


如何键入可能是函数也可能不是函数的值?

要使属性具有两种(或更多)不同的类型,可以使用

为了避免重复,您也可以为此创建一个类型:

type ConfigBoolean = boolean | ((config: Config) => boolean);

interface DefaultSettings {
  prop1: ConfigBoolean;
  prop2: ConfigBoolean;
  prop3: number;
  prop4: number;
}
通过使用泛型,您甚至可以更进一步。例如,如果
编号
也可以是原语或返回该原语的函数:

type ConfigType<T> = T | ((config: Config) => T);

interface DefaultSettings {
 prop1: ConfigType<boolean>;
 prop2: ConfigType<boolean>;
 prop3: ConfigType<number>;
 prop4: ConfigType<number>;
}
type ConfigType=T |((config:config)=>T);
界面默认设置{
prop1:配置类型;
prop2:配置类型;
prop3:配置类型;
prop4:配置类型;
}

函数类型周围的括号是必需的,否则编译器会认为:
boolean |(config:config)
,然后会混淆:)。如果你想改变它:
(config:config)=>boolean | boolean
,它仍然是不明确的。在这种情况下,编译器会认为该类型是一个返回布尔值或布尔值的函数,所以这也很奇怪

你的意思是像
prop2:boolean |(config:config)=>boolean
?@PoulKruijt这类事情就是我的意思,是-虽然使用它字面上会导致
成员“boolean”隐式地具有“any”类型。
您能详细说明上述建议的问题吗@阿列克塞尔。我没有将函数包装在额外的括号中,这会导致Typescript将其解释为文字箭头函数。这种方法有效!非常感谢。您知道我在文档中的何处可以找到此功能吗?不,抱歉,在文档中也找不到此功能
type ConfigType<T> = T | ((config: Config) => T);

interface DefaultSettings {
 prop1: ConfigType<boolean>;
 prop2: ConfigType<boolean>;
 prop3: ConfigType<number>;
 prop4: ConfigType<number>;
}