d.ts中的日期支持,用于servicestack typescript客户端

Rom*_*man 3 servicestack typescript

默认情况下,webstorm插件生成的servicestack typescript文件dtos.ts将所有日期属性设置为字符串.

// @Required()
to: string;
Run Code Online (Sandbox Code Playgroud)

在servicestack .cs文件中,此属性为DateTime.任何想法为什么它是这样,我需要做什么,它将它转换为日期作为asp.net web api例如

myt*_*thz 6

与其他语言不同,TypeScript中没有"反序列化步骤",即TypeScript DTO只定义了原始JSON中返回的Type,因为JSON中没有Date类型,Date值作为字符串返回,它的类型是当它使用JavaScript的内置JSON.parse()或转换为JS对象时eval().

可以使用以下命令转换ServiceStack.Text中返回的默认WCF日期:

function todate (s) { 
    return new Date(parseFloat(/Date\(([^)]+)\)/.exec(s)[1])); 
};
Run Code Online (Sandbox Code Playgroud)

如果您正在使用servicestack-client npm包,可以使用以下方法解决:

import { todate } from "servicestack-client";
var date = todate(wcfDateString);
Run Code Online (Sandbox Code Playgroud)

或者如果使用ServiceStack中内置的ss-utils.js:

var date = $.ss.todate(wcfDateString);
Run Code Online (Sandbox Code Playgroud)

如果将ServiceStack.Text的默认序列化更改为使用ISO8601日期格式:

JsConfig.DateHandler = DateHandler.ISO8601;
Run Code Online (Sandbox Code Playgroud)

它可以通过以下方式进行本地解析:

new Date(dateString)
Run Code Online (Sandbox Code Playgroud)

同样在配置为返回时:

JsConfig.DateHandler = DateHandler.UnixTimeMs;
Run Code Online (Sandbox Code Playgroud)

它也可以原生转换为:

new Date(unixTimeMs)
Run Code Online (Sandbox Code Playgroud)