假设我有这个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?
答案 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
答案 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