【发布时间】:2021-08-05 03:31:09
【问题描述】:
export enum DataType {
UNKNOWN = 0x00,
STRING = 0x01,
FIXED_LENGTH_STRING = 0x02,
FLOAT32 = 0x03,
FLOAT64 = 0x04,
DECIMAL = 0x05,
NULLABLE_COMPACT_INT = 0x06,
}
export async function createTableWriteStream<T extends ReadonlyArray<any>>(path: string, options: FileOptions&TableWriteStreamOptions): Promise<TableWriteStream<T>> { ... }
const writeStream = await createTableWriteStream<[string,number|null|bigint]>(testFile, {
flags: 'w',
columns: [
{
name: "col1",
type: DataType.STRING,
},
{
name: "column 2",
type: DataType.NULLABLE_COMPACT_INT,
},
]
})
我想在DataType 和TS 类型之间创建一个映射,这样我就不需要为createTableWriteStream 指定T。
类似:
interface TypeMap {
[DataType.UNKNOWN]: never,
[DataType.STRING]: string,
[DataType.FIXED_LENGTH_STRING]: string,
[DataType.FLOAT32]: number,
[DataType.FLOAT64]: number,
[DataType.DECIMAL]: number|string,
[DataType.NULLABLE_COMPACT_INT]: number|bigint|null,
}
但是我不知道如何使用它从options.columns.type 推断createTableWriteStream 的返回类型。这可能吗?
【问题讨论】:
-
请考虑修改此问题中的代码以构成minimal reproducible example,当将其放入像The TypeScript Playground (link to code) 这样的独立IDE 时,清楚地表明您面临的问题没有未声明的类型或值.这将使那些想要帮助您的人立即着手解决问题,而无需首先重新创建它。它将使您得到的任何答案都可以针对定义明确的用例进行测试。
标签: typescript