如何用打字稿代表Guid?

时间:2018-03-22 15:18:12

标签: c# typescript

假设我有这个C#类

public class Product
{
   public Guid Id { get; set; }
   public string ProductName { get; set; }
   public Decimal Price { get; set; }
   public int Level { get; set; }
}

等效的打字稿类似于:

export class Product {
  id: ???;
  productName: string;
  price: number;
  level: number;
}

如何用打字稿代表Guid?

3 个答案:

答案 0 :(得分:6)

Guids通常在Javascript中表示为字符串,因此表示GUID的最简单方式是字符串。通常,当序列化为JSON时,它表示为字符串,因此使用字符串将确保与服务器中的数据兼容。

要使GUID与简单字符串不同,您可以使用品牌类型:

type GUID = string & { isGuid: true};
function guid(guid: string) : GUID {
    return  guid as GUID; // maybe add validation that the parameter is an actual guid ?
}
export interface Product {
    id: GUID;
    productName: string;
    price: number;
    level: number;
}

declare let p: Product;
p.id = "" // error
p.id = guid("guid data"); // ok
p.id.split('-') // we have access to string methods

article对品牌类型进行了更多讨论。 typescript编译器还使用paths的标记类型,这与此用例类似。

答案 1 :(得分:2)

另一种替代方法是使用以下NPM软件包:

引导类型脚本,您可以在这里找到:https://www.npmjs.com/package/guid-typescript

然后就是这样:

import { Guid } from "guid-typescript";

export class Product {
    id: Guid;
    productName: string;
    price: number;
    level: number;
}

答案 2 :(得分:0)

在我的大多数用例中,我需要接受来自API的反序列化字符串,而且还需要生成新的id并在客户端上对其进行验证。

以上两个答案都很棒,每个都解决了一个问题,其中要点是将接受的答案中的键入内容与 guid-typescript 软件包的精神相结合:{{3} }

scope