【问题标题】:Type conversion using TypeScript interface使用 TypeScript 接口进行类型转换
【发布时间】:2020-06-07 10:04:15
【问题描述】:

这是一个奇怪的问题,但我正在处理一个包含大约 100 个输入字段的大型表单。我们将所有这些数据传递到 GraphQL 端点。我们使用的是 TypeScript,我已经根据模式定义了接口。

我想知道我是否可以使用 TypeScript 的接口类型,特别是布尔类型,将某些属性值自动转换为 truefalse,因为它们从表单中以字符串 "1" 或 @987654324 的形式到达@ 或 "true"(复选框)?然后,我可以构建一些过滤器/转换器,当我可以从接口检测到某些输入类型时,自动转换 GraphQL 请求的某些输入类型。在 StackOverflow 上有人建议做这样的事情:

interface I1 {
    x: boolean; 
}

let myVar: I1['x'];

但您不能使用定义的myVar。我想得到typeof I1.x,这样我就可以取回'boolean',然后对!!(obj.x)等一些字段进行转换。

那么我可以这样做还是真的必须生成一个巨大的对象树转换或定义特定的键,再次(重复),成为布尔值?还是我们必须考虑在 GraphQ 中使用布尔值?

【问题讨论】:

  • 对此的一种解决方案是从复选框中实际传递“true”,然后使用类型安全比较对其进行检查,然后将其自动转换为布尔值。假值不会被传递,而是被忽略。
  • 使用接口是不可能的,因为当 Typescript 编译成 Javascript 时,接口会被完全擦除;它们在运行时无效。
  • 是的,我是这么认为的。谢谢!

标签: typescript graphql


【解决方案1】:

我不知道仅使用接口进行转换的方法,但是您能否不在类中实现接口以实现类似的结果?大致如下:

interface IOne {
    x : boolean
}

class One implements IOne {
    constructor(b_val?: boolean, b_str?: string) {
        if (b_val): this.x = b_val
        if (b_str) {
            if (b_str == 'true')
                this.x = true
            else
                this.x = false
        }
    }
}

然后您使用new One(true, undefined)new One(undefined, 'true') 等处理输入以完成不同输入类型的转换,您可以将生成的对象直接传递给任何可以使用IOne 接口的对象。

【讨论】:

    猜你喜欢
    • 2019-08-22
    • 2021-11-27
    • 1970-01-01
    • 2014-10-09
    • 2018-11-28
    • 1970-01-01
    • 2016-05-16
    • 2021-01-17
    • 2021-05-24
    相关资源
    最近更新 更多