javascript - 如何使用 Typescript 通过类型而不是接口(interface)来建模对象?

标签 javascript typescript

我有以下我无法控制的 JSON:

{
    "date": "2020-01-01T00:00:00",
    "a": 0,
    "b": 0,
    "c": 0
}

而不是指定接口(interface):

interface Foo {
    date: Date,
    "a": number,
    "b": number,
    "c": number
}

我希望能够像这样静态输入有效负载:

type Age = "a";
type Salary = "b";
type Height = "c"

type Foo = Record<"date", Date> | Record<Age | Salary | Height, number>;

尽管编译器看起来很高兴,但是当我尝试从对象获取日期时,我收到以下错误:

const foo = {
        "date": "2020-01-01T00:00:00",
        "a": 0,
        "b": 0,
        "c": 0
    } as Foo;

Element implicitly has 'any' type.

如果我删除 Record<Age | Salary | Height, number>然后错误就消失了。

最佳答案

您应该使用intersection而不是union :

type Foo = Record<"date", string> & Record<Age | Salary | Height, number>

Playground

<小时/>

** 我已将 date 类型更改为 string,因为您要为此字段分配字符串值

关于javascript - 如何使用 Typescript 通过类型而不是接口(interface)来建模对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61187226/

相关文章:

javascript - 在保留宽度的同时将最大高度应用于图像

Angular RXJS forkJoin完成进度

javascript - .NET JavaScript 无法检索文件

javascript - 如何获取使用地理定位创建的动态内容并在另一个 div 中使用它?

javascript - TS2304 : Cannot find name 'require'

angular - 向返回 promise 的 javascript 方法添加延迟

javascript - Angular 2更改ngFor items类只知道它的索引

typescript - 如何将 dotenv 与 vite/petite vue 一起使用?

javascript - mapDispatchToProps 不起作用 : Uncaught TypeError: _this. props.addCountdown 不是函数

javascript - 通过使用不同的选择器选择一个元素来赋予一个元素多个事件处理程序