typescript - 正确的打字稿类型别名
问题描述
我想在打字稿中应用正确的别名类型。
[例子]
type O = {
a?: "aa",
b?: "bb",
c?: "cc"
}
type Str = 'a' | 'b' | 'c';
type ReturnOfFoo = 'aa' | 'bb' | 'cc';
const o: O = {};
const foo = (str: Str): ReturnOfFoo => {
if(str === 'a') return 'aa';
if(str === 'b') return 'bb';
return 'cc';
}
const createRandomStr = (): Str => ['a', 'b', 'c'][Math.floor(Math.random() * 3)] as Str;
const key: Str = createRandomStr();
const value: ReturnOfFoo = foo(key);
o[key] = value // o[key] error occured!
所以,我确实使用了下面的“If 语句”。
if(key === 'a') {
o[key] = value as 'aa';
}
if(key === 'b') {
o[key] = value as 'bb';
}
if(key === 'c') {
o[key] = value as 'cc';
}
但是,这并不酷。
我确实为类型编写了更多代码。
有没有更好的办法?
我可以使用“任何”类型,但这也不是一个好主意。
解决方案
推荐阅读
- c - 对于表达式 a+=b|=c,这个表达式将如何运行?
- javascript - 带有vue问题的递增和递减表单组件
- json - 接受来自请求 AKKA-HTTTP 的所有 JSON
- javascript - 如果没有正确回答,请重新发送问题
- excel - 为什么使用vba调用时应用程序窗口在打开后保持最小化?
- html - Vue.JS 和数字/标题
- mongodb - 尝试在 macOS 上安装 MongoDB 时“未找到类似名称的公式”
- salesforce - Account Docusign 中的收件人自定义按钮
- python - ANOVA 组间和组内自由度
- python - Nginx/PHP-FPM/Laravel 无法处理单个 IP 的并发请求