Typescript 我如何定义一个期望大多数键共享一个类型,并且期望特定键不同的接口?
我想创建一个类型,它期望几乎每个键的值都是相同的类型。但是,我还想要求某些键的值必须是不同的类型Typescript 我如何定义一个期望大多数键共享一个类型,并且期望特定键不同的接口?,typescript,Typescript,我想创建一个类型,它期望几乎每个键的值都是相同的类型。但是,我还想要求某些键的值必须是不同的类型 interface Item<T, U> { [key: string]: T; specificKey?: U; } 我的第一个想法是尝试使用Exclude: interface Item<T, U> { [key: Exclude<string, 'specificKey'>]: T; specificKey?: U; } 是否有方法将[k
interface Item<T, U> {
[key: string]: T;
specificKey?: U;
}
我的第一个想法是尝试使用Exclude:
interface Item<T, U> {
[key: Exclude<string, 'specificKey'>]: T;
specificKey?: U;
}
是否有方法将
[key:string]
设置为应用于除specificKey
之外的所有字符串?这是TS中的一个限制。有关详细信息,请参阅。目前,无法正确指定所需的确切类型。最接近的是使用交叉点类型:
type Item={[k:string]:T}&{specificKey:U}
但此解决方案仅在“读取”端有效:
let item:item
//阅读,没关系
const bool=item['foobar']//很好
const num=item.specificKey//good
它仍然在“写入”端中断:
//要写入,TS会引发相同的不兼容错误
let item:item={specificKey:1,foobar:true}
// ~~~~~
interface Item<T, U> {
[key: Exclude<string, 'specificKey'>]: T;
specificKey?: U;
}
An index signature parameter type cannot be a type alias.