我已经声明了我的数据结构并尝试从后端获取数据。来自后端的数据是JSON对象,它不会隐式地将数据从字符串转换为我定义的任何其他类型。
For Ex :
export interface Model {
data1 : EnumType,
data2 : date
}
export enum EnumType{
Up,
Down,
Left,
Right,
}
export class Data{
public getData() {
const url: string = '/data';
let resultData : Model[] = this.http.get<Model[]>(url);
console.log('result Data...' , resultData)
}
}
We are getting Data from backend like this : data1 : "UP" , data2 : '2012-01-26T13:51:50.417-07:00'
**Output:**
result Data... data1 : "UP" , data2 : '2012-01-26T13:51:50.417-07:00'
**Expected Output:**
result Data... data1 : 1(enum type) , data2 : 2012-01-26T13:51:50.417-07:00(Date format)
(OR) it should throw error since the data we are sending doesnt match.
如果我们使用&#34; noImplicitAny&#34;为什么它不会隐式转换?在tsConfig.json中它是否会隐式转换?
答案 0 :(得分:1)
您的期望来自误解TypeScript实际上是什么。 TS not 设计更改任何JavaScript行为。通过TS有两个主要的JS扩展:一个类型层和转换到较低版本的JS的能力(例如使用ES5输出的类)。
您应该将类型图层视为代码的(非常强大的)注释。 描述您期望对象的类型,它不指定类型。使用TS时遇到的最常见的运行时错误之一是对象没有我声明的类型。因此,所有运行时类型转换仍然必须由您完成。在这种情况下,它将是对JSON.parse()
的调用。另一个替代方法是使用JQuery,其中$.ajax
或$.get
为您提供所有繁重的工作,包括JSON转换,如果您指定JSON返回类型。
noImplicitAny
选项指的是其他内容。打开此选项后,必须为代码添加类型注释,即使您希望对象的类型为any
。关闭该选项后,将隐式输入不带注释的变量any
。同样,这纯粹是声明性的,它不会改变任何行为。
答案 1 :(得分:-1)
TypeScript仅在编译时进行类型检查。它确实会干扰运行时类型,因为它在编译时只是常规JavaScript(转换为JavaScript)。从服务器获取内容正在运行时发生,因此它与TypeScript的类型系统“无关”。
尽管如此,它可能有助于丰富您的枚举类型:
enum Direction {
Up = "UP",
Down = "DOWN",
Left = "LEFT",
Right = "RIGHT",
}
答案 2 :(得分:-1)
你应该设置:
// Instantiate the prefab
RigidBody rigidPrefab = Instantiate(Prefab, Spawnpoint.position, Spawnpoint.rotation) as Rigidbody;
// Detach all children from the parent. Each child refers to the transform of a single cube.
foreach (Transform child in rigidPrefab.transform)
{
child.parent = null;
}
当您拨打电话时,您可以将其称为export const enum EnumType{
Up = 1,
Down = 2,
Left = 3,
Right = 4,
}
,结果会得到EnumType.UP
。有关枚举的更多信息here.