Typescript 创建具有未知类型的可选未知属性的接口

Typescript 创建具有未知类型的可选未知属性的接口,typescript,Typescript,在此处添加“any”实际上会删除名称上的推断“string”类型,如果未将xxx分配给示例,则该类型将存在 有没有办法让接口或类型通过推断的类型?这可以通过使用泛型记录来完成: 类型示例=记录&{ //非通用接口属性位于此处 值?:字符串 }; constxxx:Example={name:'Thomas'}; 常数b=xxx.name;//好的,推断为字符串 常数x=xxx.address;//不好 为了避免在示例中写入显式类型参数,可以使用通用标识函数: 函数示例(e:示例):示例{ 返回

在此处添加“any”实际上会删除名称上的推断“string”类型,如果未将
xxx
分配给示例,则该类型将存在


有没有办法让接口或类型通过推断的类型?

这可以通过使用泛型
记录来完成:

类型示例=记录&{
//非通用接口属性位于此处
值?:字符串
};
constxxx:Example={name:'Thomas'};
常数b=xxx.name;//好的,推断为字符串
常数x=xxx.address;//不好
为了避免在
示例中写入显式类型参数,可以使用通用标识函数:

函数示例(e:示例):示例{
返回e;
}
const xxx=示例({name:'Thomas'});

常量xxx将被推断为具有所需的类型
示例

您可以将泛型类型与并集一起使用:

type WithName=T&{name?:string};
const myThing:WithName={name:'sup'};

type-Example={value?:string;}&{[prop:string]:any}
PS:它是
name?
xxx。value
是吗?@zerkms这将从
name
属性中删除推断出的字符串类型,与上面的接口相同。那里没有类型推断-您显式分配类型。
const xxx={name:'Thomas'}
在没有显式分配类型的情况下进行了推断类型。我只是尝试添加有关
值的信息,而不是删除对象其余部分的推断类型。当然,这里是推断的。但是在原始代码-
常量xxx:Example
中,您显式声明了类型。该类型包含名称
属性rty
或type
any
。您请求的内容没有任何意义。您不能将
xxx.name
作为
string
,因为它没有声明为字符串。您真的需要显式设置
xxx
的类型吗?
interface Example {
    value?: string
    [prop: string]: any
}

const xxx: Example = { name: 'Thomas' }

const v = xxx.name
interface DictionaryLike {
    [index: string]: unknown
}

interface Example extends DictionaryLike {
  name: string;
}

const xxx: Example = { name: 'Thomas' }

const v = xxx.name; // string
const w = xxx.foo; // unknown