我想编写一个函数,让我分派传入的泛型类型。我不关心运行时值,只关心编译时类型:
const value: any;
const x: DateTime = parseAs<DateTime>(value)
const y: string = parseAs<string>(value)
const z: number = parseAs<number>(value)
我们可以假设每个
parseAs
函数的实现是无关紧要的(只是它采用 any
的值,并返回 A
中的类型)
这可能吗? IE。根据传入的通用参数调用 diff 函数。我不关心传入的值参数,我只是想盲目地调用它的解析函数
因为类型信息在编译期间的发出步骤之前被删除,所以不可能使用类型信息影响运行时值。
但是,如果人体工程学是您的目标,那么您可以使用重载函数来实现如下所示的强类型结果:
// I presume this is a type you created, so
// I'll set it to Date for this example:
type DateTime = Date;
type ParseFormat = 'DateTime' | 'string' | 'number';
function parseAs(format: 'DateTime', value: unknown): DateTime;
function parseAs(format: 'string', value: unknown): string;
function parseAs(format: 'number', value: unknown): number;
function parseAs(format: ParseFormat, value: unknown) {
// Actually implement
return undefined as any;
}
// Then using is just as ergonomic as supplying a type generic:
declare const value: any;
parseAs('DateTime', value); // DateTime
parseAs('string', value); // string
parseAs('number', value); // number
我为此编写了一个库, 基于 sdf 的一些想法, 也许你可以看看: