首页 > 解决方案 > 有没有办法防止 Typescript 中的类型变窄

问题描述

有没有办法防止子类定义覆盖基类?或者防止类型缩小?通过编译器错误或 linting 警告。

背景

我正在开发一个包含数十个实体的 Angular 项目。每个实体都映射到一个 SQL 表,但也可以在到达客户端之前包含额外的自定义属性。

现在,每个实体都有两个类,一个是从 SQL 表列类型生成的基类,另一个是扩展基类并包含自定义属性的可用类。

该项目正在使用--strictNullChecks

问题

问题是打字稿允许类型缩小,所以如果Comments: string | null基类上有一个属性,那么子类可以拥有Comments: string而不会导致错误。但实际值可以为空,所以我不想意外缩小它并让编译器认为它不可为空。

例子

// !!!DO NOT MODIFY!!! 
export abstract class CountryEntityBase {
    /** Max Length: 3 */
    Code: string;

    /** Max Length: 3 */
    Country_ID: string;

    /** Max Length: 50 */
    Description: string | null;

    IsActive: boolean;

    SortOrder: number | null;
}
export class CountryEntity extends CountryEntityBase {
    $id: string;
    $type: string;
    CreatedBy: string;
    CreatedDate: Date;
    Description: string; // I want to prevent this
}

标签: angulartypescript

解决方案


推荐阅读