Typescript 如何将数字类型值转换为空字符串?

Typescript 如何将数字类型值转换为空字符串?,typescript,type-conversion,Typescript,Type Conversion,我正在使用这个TypeScript数据结构(TypeScript很重要,因为类型不同): 我想得到这个: private data = { parent_id: '', name: '' }; 如何将parent\u id:number字段转换为parent\u id:string?您可以定义如下界面: interface DataInterface { parent_id: number | string; name: string; } 然后可以定义对象:

我正在使用这个
TypeScript
数据结构(TypeScript很重要,因为类型不同):

我想得到这个:

  private data = {
    parent_id: '',
    name: ''
  };

如何将
parent\u id:number
字段转换为
parent\u id:string

您可以定义如下界面:

interface DataInterface {
  parent_id: number | string;
  name: string;
}
然后可以定义对象:

const data: DataInterface = {
  parent_id: 0,
  name: 'foo'
};
这也是允许的:

data.parent_id = '';

您可以定义如下接口:

interface DataInterface {
  parent_id: number | string;
  name: string;
}
然后可以定义对象:

const data: DataInterface = {
  parent_id: 0,
  name: 'foo'
};
这也是允许的:

data.parent_id = '';

我认为最好的做法是在将ID输入数据类之前,将其定义为字符串,即

 id = '0';
 private data = {
     parent_id: id,
     name: ''
 };

通过这种方式,如果您有任何其他ID作为字符串,则可以将它们设置为变量并使用
.toString()
函数,该函数将自动将数字转换为字符串,然后您可以复制我在上面所做的操作。

我认为最好的做法是在将其输入数据类之前将其ID定义为字符串,即

 id = '0';
 private data = {
     parent_id: id,
     name: ''
 };

通过这种方式,如果您有任何其他ID作为字符串,则可以将它们设置为变量并使用
.toString()
函数,该函数将自动将数字转换为字符串,然后您可以复制我在上面所做的操作。

我们实际上可以告诉编译器使用条件类型和
typeof
关键字对我们进行区分。见下文:

type isZero<N> = N extends (0 | '') ? '' : number;
type ParentIdType = isZero<typeof instance.id>;

interface Data {
    parent_id: ParentIdType;
    name: string;
}

class SomeClassWithData {
    readonly id = <your value>;

    private data: Data = {
        parent_id: this.id,
        name: 'foo',
    }
}

const instance = new SomeClassWithData();
这个解决方案很好,因为

instance.id=1

instance.id=''

允许,但

instance.id=0

instance.id='foo'


将抛出一个错误。

我们实际上可以告诉编译器使用条件类型和
关键字的
类型为我们进行区分。见下文:

type isZero<N> = N extends (0 | '') ? '' : number;
type ParentIdType = isZero<typeof instance.id>;

interface Data {
    parent_id: ParentIdType;
    name: string;
}

class SomeClassWithData {
    readonly id = <your value>;

    private data: Data = {
        parent_id: this.id,
        name: 'foo',
    }
}

const instance = new SomeClassWithData();
这个解决方案很好,因为

instance.id=1

instance.id=''

允许,但

instance.id=0

instance.id='foo'


将抛出一个错误。

您需要按其名称对其进行强制转换。在这个站点上向下滚动到
类型断言
,获取一些信息,具体来说,你想做什么?这里没有足够的信息来给出有意义的答案。您最终可能会有一个联合类型
number | string
,但老实说,声明一个全新的类型可能更干净。在任何情况下,您都必须手动运行转换。@jcalz:parnet_id
最初是作为一个数字创建的,但后端只接受大于零的整数或空字符串<代码>0
是不可接受的值。您需要按调用方式强制转换它。在这个站点上向下滚动到
类型断言
,获取一些信息,具体来说,你想做什么?这里没有足够的信息来给出有意义的答案。您最终可能会有一个联合类型
number | string
,但老实说,声明一个全新的类型可能更干净。在任何情况下,您都必须手动运行转换。@jcalz:parnet_id
最初是作为一个数字创建的,但后端只接受大于零的整数或空字符串
0
是不可接受的值。解决方案不错,但我也需要接受
0
'
。这是问题的关键。我需要接受这些值:
'
0
1
,以及高于
0
的其他整数。但是只有空字符串。很好的解决方案,但我也需要接受
0
'
。这是问题的关键。我需要接受这些值:
'
0
1
,以及高于
0
的其他整数。但只有空字符串。