typescript如何生成对象';s type当前值的类型?
然后,typescript如何生成对象';s type当前值的类型?,typescript,Typescript,然后,obj的类型为: const obj = { a: 1, b: '2' } 但有时,我希望它的类型是: { a: number, b: string } 除以下各项外: { a: 1, b: '2' } 还有其他好方法吗?如果要强制执行一个类型,该类型的属性a的值始终为1,或者更一般地说,强制执行某些属性的保证常量值,请使其满足类似以下的接口: const obj: { a: 1, b: '2' } = { a: 1, b: '2' } 请记住,这仅适用于属性上的基元值,或包含其他
obj
的类型为:
const obj = { a: 1, b: '2' }
但有时,我希望它的类型是:
{ a: number, b: string }
除以下各项外:
{ a: 1, b: '2' }
还有其他好方法吗?如果要强制执行一个类型,该类型的属性
a
的值始终为1
,或者更一般地说,强制执行某些属性的保证常量值,请使其满足类似以下的接口:
const obj: { a: 1, b: '2' } = { a: 1, b: '2' }
请记住,这仅适用于属性上的基元值,或包含其他文字值的对象或数组文字。如果值仅以变量形式引用,则类型推断在此可能受到限制。Typescript不能总是推断命名对象的值。在这种情况下,这些类型签名主要用作断言,向下游代码保证值应被视为
红圈
如果在推断常量类型时要保留文本类型,可以使用作为常量
断言:
interface RedCircle extends Shape {
type: "circle";
color: "red";
}
这也将使对象成为只读对象,但对于常量来说,这可能是正常的
如果您不希望属性为readonly
,有几个选项,但没有一个是无缝的
一种选择是在文本上使用作为常量
:
const obj = { a: 1, b: '2' } as const
// Same as
// const obj: {
// readonly a: 1;
// readonly b: "2";
// }
或者先声明只读版本,然后使其可变:
const obj = { a: 1 as const, b: '2' as const }
// Same as
// const obj: {
// a: 1;
// b: "2";
// }
类型Mutable={-readonly[P in keyof T]:T[P]}
常量ro_obj={a:1,b:'2'}作为常量
常量对象:可变=ro_对象
//常量对象:{
//a:1;
//b:“2”;
// }
或者我个人的最爱使用函数来推断字符串文字类型:
type Mutable<T> = { -readonly [P in keyof T]: T[P]}
const ro_obj = { a: 1 , b: '2' } as const
const obj: Mutable<typeof ro_obj> = ro_obj
// const obj: {
// a: 1;
// b: "2";
// }
函数作为文本(o:T){
返回o;
}
常量obj=asLiterals({a:1,b:'2'});
//同
//常量对象:{
//a:数字;
//b:弦;
// }
无法将值指定为类型,因此无法执行此操作。使用指定为当前值的类型,您试图实现什么?也许还有另一种方法,这里的常数只是一个例子。那么,它是否可以不是只读的?
function asLiterals<T extends Record<string, string | number | null | undefined | boolean >>(o: T) {
return o;
}
const obj = asLiterals({ a: 1 , b: '2' });
// Same as
// const obj: {
// a: number;
// b: string;
// }