我们说我有一个流类型Suit
,我想把它组成另一种名为Card
的类型。
// types.js
type Suit =
| "Diamonds"
| "Clubs"
| "Hearts"
| "Spades";
type Card = {
...
suit: Suit,
...
}
不是直接在suit.js中对Suit字符串进行硬编码,而是可以基于JavaScript原语(数组)动态生成Suit
类型吗?说...
// constants.js
const SUITS = ['Diamonds', 'Clubs', 'Hearts', 'Spades'];
这样,套装只能定义一次,并且在JavaScript构造内部,可以在应用程序的其他部分重复使用。例如,应用程序中其他位置需要访问所有可用套装的组件:
// component.js
SUITS.map((suit: Suit): void => { ... });
答案 0 :(得分:2)
实际上可以使用实用程序类型$Keys:
const SUITS = {
Diamonds: 'Diamonds',
Clubs: 'Clubs',
Hearts: 'Hearts',
Spades: 'Spades',
};
type Suit = $Keys<typeof SUITS>
const suit1 : Suit = 'Diamonds'; // OK
const suit2 : Suit = 'Foo'; // Type error
请注意,对于此示例,SUITS中的值实际上并不重要,流将查看SUITS
中的键。 type Suit
将类似于联合类型type Suit = 'Diamonds' | 'Clubs' | ...