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
的其他整数。但只有空字符串。