打字稿防止断言为超类型

时间:2019-06-20 13:20:02

标签: typescript tsconfig

是否有Typescript编译器标记,使得以下代码无法编译?

interface A {
    key: number
}    
var B = {} as A;

对于任何类型A扩展为B的情况,要使上面的内容编译,都必须使用双重声明:var B = {} as any as A;

此场景的其他一些示例,其中A扩展了B,但是允许断言B属于A类型。

class A {
    public key = 1;
}
var B = {} as A;               // Would not want to compile

declare var A: number | null;
var B = A as number;           // Would not want to compile

1 个答案:

答案 0 :(得分:0)

我不确定您的最终目标是什么,但是我可以解释为什么下面的代码可以编译:

interface A {
    key: number
}    
var B = {} as A;

TypeScript具有结构类型系统。您使用一个空对象{},该对象与任何其他类型都兼容。这就是为什么没有错误。

仍然,尝试更好地描述您的目标。