可以在枚举中返回一个接口。

huangapple go评论80阅读模式
英文:

Can I return an Interface within an Enum

问题

以下是翻译好的部分:

我得到以下错误:

- 类型 '{ serial: string; }' 不能赋值给类型 'DataType'(2322)
- 无法赋值给 'DataValidated',因为它是一个只读属性。(2540)
英文:

Can I return an Interface within an Enum?

const PREFIX: string = 'TEST';

interface DataValidated {
    serial: string;
}

enum DataType {
    Invalid,
    DataValidated
}

class DataValidate {
 
    validate(data: string) : DataType {
        if (data.startsWith(PREFIX)) {
            return DataType.Invalid;
        }

        return DataType.DataValidated = {
            serial: data,
        };
    }
}

I am getting the following errors:

  • Type '{ serial: string; }' is not assignable to type 'DataType'.(2322)
  • Cannot assign to 'DataValidated' because it is a read-only property.(2540)

答案1

得分: 2

枚举在TS中无法包装值。请将返回类型更改为具有区分联合类型:

interface DataInvalid {
  type: DataType.Invalid;
}

interface DataValidated {
  serial: string;
  type: DataType.DataValidated;
}

interface Data extends DataValidated | DataInvalid {}

class DataValidate {
  validate(data: string): Data {
    if (data.startsWith(PREFIX)) {
      return { type: DataType.Invalid };
    }

    return {
      type: DataType.DataValidated,
      serial: data,
    };
  }
}

这样编译器将能够推断出是否有数据,当您在data.type进行测试时。

英文:

Enums cannot wrap values in TS. Make your return type a discrimated union :

interface DataInvalid {
  type: DataType.Invalid;
}

interface DataValidated {
    serial: string;
    type: DataType.DataValidated;
}
interface Data : DataValidated|DataInvalid

class DataValidate {
 
    validate(data: string) : Data {
        if (data.startsWith(PREFIX)) {
            return {type: DataType.Invalid};
        }

        return = {
            type: DataType.DataValidated
            serial: data,
        };
    }
}

That way the compiler will able to infer if there is data, when you're testing for data.type

huangapple
  • 本文由 发表于 2023年7月6日 17:01:05
  • 转载请务必保留本文链接:https://go.coder-hub.com/76627156.html
匿名

发表评论

匿名网友

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定