typescript - 带有“strictNullChecks”编译器选项的可失败构造函数
问题描述
我喜欢strictNullChecks
在 Typescript 中使用选项以获得更好和更明确null
/undefined
处理的想法。但是我找不到启用启用“可失败构造函数”模式的方法strictNullChecks
。
通常默认值strictNullChecks
是所需的行为,但有时undefined
从构造函数返回是有意义的,并且代码更具可读性和灵活性,而不是在无法创建对象时抛出错误。
对于常规函数类型,这可以通过添加undefined
到函数的返回类型来明确允许。但是 Typescript 不允许设置构造函数的返回类型。
有什么方法可以启用并且在某些情况下strictNullChecks
仍然可以让构造函数返回?undefined
解决方案
Typescript 不支持类中构造函数的返回类型的类型注释。
您可以声明该类并将构造函数单独定义为返回InstanceType | undefined
。
class _X {
constructor() {
if (Math.random() > 0.5) return undefined as any;
}
}
const X = _X as MakeFailable<typeof _X>;
type MakeFailable<T extends new (...a: any[]) => any> = {
new (...a: ConstructorParameters<T>): undefined | InstanceType<T>
} & Pick<T, keyof T>
一个问题是,以这种方式获得的类将不可继承,因为 typescript 无法处理undefined
构造函数的返回。
你甚至可以创建一个辅助函数来更好地隐藏实现类:
type MakeFailable<T extends new (...a: any[]) => any> = {
new (...a: ConstructorParameters<T>): undefined | InstanceType<T>
} & Pick<T, keyof T>
function makeFailable<T extends new (...a: any[]) => any>(cls: T): MakeFailable<T> {
return cls as any
}
const Foo = makeFailable(class {
constructor() {
if (Math.random() > 0.5) return undefined as any;
}
})
type Foo = InstanceType<typeof Foo>
推荐阅读
- android - 重现强制关闭的选项
- android - ExtractedText 的用例
- html - 超链接在 HTML 中不可见
- javascript - 尽管在 console.log 中显示其存在,但无法访问对象数据成员。尝试访问返回未定义
- c# - 在 C# 中编组后 applink.c 不起作用
- android - 两个应用程序之间通信的最佳方式
- php - 在确定的迭代次数后重新启动 while 循环
- node.js - git 和 heroku 出错
- speech-recognition - 保存 Julius 的文本输出
- c# - 如何识别
用于 Int、String、Generic 类型或类的类型