根据泛型类型调度不同的功能

问题描述 投票:0回答:2

我想编写一个函数,让我分派传入的泛型类型。我不关心运行时值,只关心编译时类型:

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 函数。我不关心传入的值参数,我只是想盲目地调用它的解析函数

typescript typescript-generics
2个回答
4
投票

因为类型信息在编译期间的发出步骤之前被删除,所以不可能使用类型信息影响运行时值。

但是,如果人体工程学是您的目标,那么您可以使用重载函数来实现如下所示的强类型结果:

TS游乐场

// 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


0
投票

我为此编写了一个库, 基于 sdf 的一些想法, 也许你可以看看:

https://github.com/Semi-0/GenericProcedure

© www.soinside.com 2019 - 2024. All rights reserved.