ts 里类似 golang 这种写法怎么实现?

查看 134|回复 13
作者:imherer   
假如我现在有一个status,它的值是数字,但是需要有一个中文的说明,于是在 golang 里可以这样写
go:
type Status int
const Success Status = 1
const Failed Status = 2
func (s Success) ToString() string{
        return "成功"
}
func (s Failed) ToString() string{
        return "失败"
}
在使用的时候,如果我想要字符串的说明直接 Success.ToString()就行了
ts 里有类似的实现吗?
我现在是这样写的
ts:
export enum Status {
  Success = { id: 1, value: "成功" },
  Failed = { id: 2, value: "失败" },
}
使用:Status.Success.value
yukinomiu   
你确定 golang 可以这么写?
sunny352787   
别瞎说啊,golang 不是这么写的
imherer
OP
  
@yukinomiu
@sunny352787
不好意思,确实是写错了,应该是把 Success 和 Failed 分别定义 type
Vegetable   
你这 golang 的代码根本不对,实际上写法会比这个丑很多,因为你没办法为值编写方法,你只能为类型编写方法。
写出来大概就是:
type Status int
const Success Status = 1
const Failed Status = 2
func (s Status) ToString() string {
if s == Failed {
return "失败"
}
if s == Success {
return "成功"
}
return "成功"
}
这样值和类型方法耦合,我觉得相当难看,ts 想做成这样单独定义一个 explain(value)也没啥区别吧
pangdundun996   
```go
type Status int
const Success Status = 1
const Failed Status = 2
func (s Status) ToString() string {
if s == Success {
return "success"
}
return "failed"
}
```
方法只能绑到 type 上吧
LuckyLauncher   
你是不是混淆了类型和值的概念
enchilada2020   
enum Status {
Success = 1,
Failed
}
console.log(Status.Success)
console.log(Status[Status.Success])
建议翻翻文档 Reverse Mappings 那节 清清楚楚写着呢
kriszu   
你要在 ts 里实现这种效果,没必要用枚举啊,枚举的值只能是 string,number,boolean ,你可以定义一个对象或者类来实现
horizon   
自定义 enum class ,然后自己实现 toString 方法
另外,ts 里不建议用自带的 enum
https://mkosir.github.io/typescript-style-guide/#enums--const-assertion
您需要登录后才可以回帖 登录 | 立即注册

返回顶部