gpt4 book ai didi

javascript - Typescript 接口(interface)中的日期在检查时实际上是字符串

转载 作者:数据小太阳 更新时间:2023-10-29 05:11:48 25 4
gpt4 key购买 nike

不幸的是,重现此代码的总代码会很长,所以我希望我的问题很明显,我可以轻松提供。如果需要,我会发布更完整的解决方案。

首先,我定义了一个接口(interface):

export interface ITest {
myDate: Date;
}

然后我创建了一个数组用于测试:

export const TEST: ITest[]=[{myDate: new Date(1995, 8, 1)}]

我使用 Angular2 中的一项服务公开这些内容,该服务从 angular2-in-memory-web-api 访问 InMemoryDbService。我调用它并获取数组的代码如下:

get(): Promise<ITest[]>{
return this.http.get(this.testUrl)
.toPromise()
.then(response => response.json().data as ITest[])
.catch(this.handleError);
}

...然后我将它带入我的组件:

    this.testService.get().then(tests => {
this.tests = tests;
console.log("Date Type:"+typeof(this.tests[0].myDate));
});

一切正常,但问题是那里显示的 console.log 语句导致:

Date Type:string

其中的数据是正确的,因为我的日期保存的字符串是 1995-09-01T07:00:00.000Z,但主要问题是 - 它不是 日期 是一个字符串!在 VS Code 中,我什至获得了 toDateString 等方法的代码完成,但是当我执行它们时,我(当然)得到了 toDateString is not a function

我很确定问题出在 response => response.json().data as ITest[] 上,但为什么日期数据没有转换为实际的 日期?我做错了,我明白了。我应该如何处理这个问题才能让我的对象获得我期望的类型?

最佳答案

您正在使用一个界面并且type assertion基本上告诉 TypeScript 该对象符合该接口(interface)。

但实际上情况并非如此,因为您正在转换的是一个 json 对象,其中“myDate”属性被表示为一个字符串。

使用类型断言不会以任何方式影响生成的 javascript 代码 - 您必须自己进行实际的类型转换。

之所以以字符串形式出现,是因为没有以 JSON 格式定义类型来表示 Date,因此服务器很可能只是发送 date.toString() 的结果。

您的一个选择是使用一个类来表示返回值并从 JSON 属性实例化一个对象,如下所示:

var response = JSON.parse(JSON.stringify({ myDate: new Date() }));

class Test {
constructor(json: { myDate: string }) {

this.myDate = new Date(json.myDate);
}

myDate: Date;
}

let test = new Test(response);
console.log("Type: " + typeof (test.myDate));
console.log("Value: " + test.myDate);

关于javascript - Typescript 接口(interface)中的日期在检查时实际上是字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39925786/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com