期望的行为是:

const obj: ??? = {
  [Fruit<T>]: Taste<T>,
  [Fruit<Y>]: Taste<Y>,
}

const key: Fruit<T> = ...;

obj[key] // can only be Taste<T>

我知道我可以使用Record<Fruit<T>, Taste<T>>但它仍然允许我为Fruit<Y>设置Taste<T> Fruit<Y>

#1楼 票数:0

这样做的一种方法是拥有一个映射类型来表示Fruit与哪种Taste相关联,例如

type FruitTasteMap = {
    apple: 'yummy'
    banana: 'not so much'
}

然后您的对象将被键入为

type F = {
    [k in keyof FruitTasteMap]: FruitTasteMap[k]
} 

这会导致您正在寻找的内容

const ok: F = { // OK
  apple: 'yummy',
  banana: 'not so much'
}

const wrong: F = {
  apple: 'yummy',
  banana: 'like it!' // Type '"like it!"' is not assignable to type '"not so much"'
}

  ask by mere translate from so

未解决问题?本站智能推荐:

1回复

TypeScript泛型的类型安全

我不确定是否做错了,还是设计使然... 在我班上 我有办法 我创建列表的一个实例 但现在我仍然可以 foo和bar是不相关的类型。 这不会触发任何编译器警告,对此我有点推迟。 我做错了吗,还是按预期进行?
1回复

是否可以以仍然强制执行类型安全的方式编写泛型?

假设我有多个具有类似方法的类。 在这种情况下,一堆具有 saveModel 方法的服务:public async saveModel(newModel: IModel): Promise<IModel> { return await newModel.save();} 我制作的通用
2回复

定义类型安全的打字稿泛型

你能用安全类型定义泛型吗,就像用 c# 一样? 例如 Typescript 现在有泛型,但我可以执行类似的操作吗? 谢谢。
1回复

是否可以在没有声明的超类泛型的情况下强制泛型抽象方法的类型安全?

我有一个抽象类: 这是一个示例子类: 我的代码按原样工作,但是问题是所有引用ParentClass代码都必须将其引用为ParentClass<any, any> 。 由于泛型类型纯粹是出于内部目的(仅protected东西),我想知道是否存在一种从父类中删除泛型类型的好方法
1回复

Typescript泛型是否使用类型擦除来实现泛型?

意思是你不能使用这样的东西? 获取泛型声明的基础类型的任何解决方法? 更新1: 正如Ryan Cavanaugh所说,在编译时,整个类型系统被删除,更像是Java的泛型实现。 我相信.Net实现Generics以保存已编译代码中的类型信息比Java更好。 但是,我不禁要问,为什么
1回复

我可以使用Typescript泛型来过滤对象中的键吗?

我有一个具有工作逻辑的过滤器函数,但我不知道如何编写其类型: Typescript仍然认为'b'属性存在,因此我正在寻找一种方法来指定从T删除keys 。 我对Omit很熟悉(但是对于Typescript来说通常还很陌生),我认为它可以在其中发挥作用,但是我还没有想办法让它与Array相
2回复

TypeScript中是否可以使用泛型类型别名?

TypeScript 1.4 引入了类型别名 。 这些示例显示了如何使用type MyGreeter = Greeter<string>别名,但是是否可以使用通用别名? 以下示例不起作用 : 是否可以在不进行类型转换的情况下对泛型类别进行别名?
1回复

Typescript获取泛型内部键的类型

我有一个名为Store的类,它将状态类型作为泛型。 当我需要扩展商店时,我正在做这样的事情: 但现在我想在我的商店中添加一个返回实体的方法。 在这种情况下,如何将getEntities的返回类型定义为Todo类型?