Jon*_*rsi 14 javascript types flowtype
假设我有一个流类型Suit,我想把它组成另一个叫做的类型Card.
// types.js
type Suit =
| "Diamonds"
| "Clubs"
| "Hearts"
| "Spades";
type Card = {
...
suit: Suit,
...
}
Run Code Online (Sandbox Code Playgroud)
而不是直接在suit.js中对Suit字符串进行硬编码,是否可以Suit基于JavaScript原语(数组)动态生成类型?说...
// constants.js
const SUITS = ['Diamonds', 'Clubs', 'Hearts', 'Spades'];
Run Code Online (Sandbox Code Playgroud)
通过这种方式,套装只能定义一次,并且可以在JavaScript构造中定义,以便在应用程序的其他部分中重复使用.例如,应用程序中其他位置需要访问所有可用套装的组件:
// component.js
SUITS.map((suit: Suit): void => { ... });
Run Code Online (Sandbox Code Playgroud)
这实际上可以使用实用程序类型$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
Run Code Online (Sandbox Code Playgroud)
请注意,对于此示例, SUITS 中的值实际上并不重要,流程将查看 中的键SUITS。type Suit就像联合类型一样type Suit = 'Diamonds' | 'Clubs' | ...