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.