【发布时间】:2019-02-04 05:17:47
【问题描述】:
我有一个 FileHandler 类,然后是一个扩展原始的 FileOrNullHandler 类。
问题在于,FileOrNullHandler 中从 FileHandler 继承的方法被原始类中创建的返回类型卡住了。
export class FileHandler {
static async readFileFromFileQuery (fq: FileQuery): Promise<File> {
const { path, encoding, flag } = FileQueryHandler.make(fq);
const content = await promisify(fs.readFile)(path, { encoding, flag })
return { path, encoding, flag, content };
}
static async readFile (a: Path | FileQuery, b?: Omit<FileQuery, 'path'>): Promise<File> {
if (typeof a === 'string') a = FileQueryHandler.getFromPath(a, b);
return this.readFileFromFileQuery(a);
}
static async readFiles (a: (Path | FileQuery)[] | Directory, b?: Omit<FileQuery, 'path'>): Promise<File[]> {
if (a instanceof Array) return Promise.all(a.map(p => this.readFile(p, b)));
return this.readFiles(PathHandler.getFromDirectory(a), b);
}
static async readFilesFromDirectory(a: Path | FileQuery, b?: Omit<FileQuery, 'path'>): Promise<File[]> {
const ps = await DirectoryHandler.readDirectory(a);
if (typeof a === 'string') return await (this).readFiles(ps, b);
return await this.readFiles(ps, a);
}
}
export class FileOrNullHandler extends FileHandler {
static async readFileFromFileQuery (fq: FileQuery): Promise<File | null> {
return orNull(() => FileHandler.readFileFromFileQuery(fq));
}
}
我在这里看到了获取正确类型的两个选项之一。
- 根据
this设置原始方法的相对返回类型。 (可能不可能) - 在
FileOrNullHandler中覆盖方法ReturnType。
【问题讨论】:
标签: typescript