如何从Typescript中的类元组中提取鉴别器

米凯西

鉴于以下代码:

abstract class Fruit {
  abstract readonly fruitType: string;
}

class Banana extends Fruit {
  readonly fruitType = "banana";
  length = 2;
  color = "yellow";
}

class Pear extends Fruit {
  readonly fruitType = "pear";
  roundness = "very round";
}

class Apple extends Fruit {
  readonly fruitType = "apple";
  fallOfMan = true;
  hasWorms = true;
}

const fruits = [Banana, Pear, Apple] as const;


export type Fruits = typeof fruits[number];


export type FruitTypes = Fruits["fruitType"]; // This should be "banana" | "pear" | "apple"

为什么我无法得到正确的鉴别器联合?

继承人的操场:https://www.typescriptlang.org/play?#code/IYIwzgLgTsDGEAJYBthjAgYlArgS0QG8BYAKAQVEhngSgFNgATAewDtkBPBAM1wIAqnAA70AXAmp42AcwDcZAL5kyKNBgBCwNtuAJ6ADwj02TDNnxEyFBs3Zde-CENEIAvAgBEIXTs8LyBGQTGQgAC3cEACYAilgWZBYoSM9OemREgHd-JRVSNXQEAAVGZMNjU3MnBBJA21YObj5LF3oU0WAoHLqWHFM2ekKPTwA3eihuKF7TbuVSVVRCgEFhYWD9IxMzLGram0YGh2bBETbh4FXg7ooeYAyAeR4AWW1I6Bx6WIQwtAB1JIAthgPO9Prl5vl2JBHJZgQgANpaHQ6AA0xVKaJWa3oAF1KBh4mxIAE8oZhElEBBTjtYW9TiweDCCGB4WwcACQOMcSSIWSKQgqa4LCdRHDhRAWZ5js5Tp5uQgAPQKhACMJ4DBgMK9ZBMBCcrw+ZHATwIAA+Xg6XTNXgu2M8QA

TJ克劳德

我回答的时候你的问题是:

// Original code in question
export type FruitTypes = Fruits["name"];

Fruits是类型的构造函数的联合BananaPear以及Apple -实际的功能,而不是类型它们所产生的实例。name(constructor) 函数of 始终是一个字符串,这就是为什么最初您得到string. 更新后的问题现在出现错误,因为这些构造函数没有fruitType成员。

您可以获取想要使用的联合InstanceType来获取这些构造函数创建的实例的类型,并"fruitType"访问fruitType这些实例成员的类型

export type FruitTypes = InstanceType<Fruits>["fruitType"];
// −−−−−−−−−−−−−−−−−−−−−−^^^^^^^^^^^^^−−−−−−^^^^^^^^^^^^^^

游乐场链接

或者你可以更直接:

export type FruitTypes = (Banana | Pear | Apple)["fruitType"];

...但我猜你是fruits因为维护原因试图避免重复该列表(在上面和)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章