TypeScript:如何在运行时初始化 keyof T(通用)

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

所以我有这个 TypeScript 类,其中有一个泛型和一个 keyof generic 类型的属性,如下所示:

export class ColumnDefinition<T> {
    field: keyof T
}

编译器抱怨,因为它需要一个我在编译时没有的默认值,但我不想允许用户在此属性中使用 null 或 undefined ,所以我不能这样做:

export class ColumnDefinition<T> {
    // can't do this, I need to make the field mandatory
    field: keyof T | undefined;
}

我的问题是,有没有一种方法可以在运行时用默认值初始化字段,而无需在编译时知道泛型?就像设置通用类中的第一个键一样?

注意:我不想禁用 ts-ignore,我正在寻找真正的解决方案

typescript typescript-generics strong-typing
1个回答
0
投票

如果您在构造函数中使用可见性修饰符(

field
public
private
)设置
protected
,那么它将成为类属性,在创建类时传入值时设置

export class ColumnDefinition<T> {
    constructor(private field: keyof T){ }

    logField(){
        console.log(this.field);
    }
}

const colDef = new ColumnDefinition<{ x: number; }>('x');

colDef.logField(); //"x"

const badColDef = new ColumnDefinition<{ x: number; }>('foo'); //Error!

TypeScript Playground

上查看它的实际应用
© www.soinside.com 2019 - 2024. All rights reserved.