一个介绍以打字稿3.0的“未知”类型

打字稿3.0中引入的“未知”类型。什么是分配给未知的,但未知是不能分配给任何东西。这是下面的情况是有用的。

常量S:串= loadData()
让OBJ:未知= JSON.parse(S)

只要你尝试并分配obj转换为任何东西,或尝试将其传递到一个功能,您将收到以下错误。

index.ts:30:11 - 错误TS2345:类型“未知”的参数是不能分配给类型的参数“MyClass的”。

这是对比的是几乎任何事情都会发生,类型安全消失的“任何”类型。

但是,什么好是一个对象,你不能做什么?这就是一种保护功能的用武之地。

功能isMyClass(OBJ:任何):obj是MyClass的{
如果(obj.name ===未定义|| obj.kind ===未定义){
返回假
}
返回true
}

如果(isMyClass(OBJ)){
IF块的obj的类型中//现在会奇迹般地是MyClass
执行console.log(obj.name)
}

现在,你从API,数据库或其它地方,你的护卫型将作为看门人收到字符串打交道时有极其严格的类型检查。