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