如何使用Typescript将不可变映射正确转换为严格类型
如何将以下内容从js转换为Typescript:如何使用Typescript将不可变映射正确转换为严格类型,typescript,immutability,immutable.js,Typescript,Immutability,Immutable.js,如何将以下内容从js转换为Typescript: Immutable.Map({ item1: null, item2: "hello", item3: Immutable.Map({ item4: 2, item5: true }) }); 你可以这样做: type Immutable<T> = { readonly [K in keyof T]: Immutable<T[K]>; }; // Th
Immutable.Map({
item1: null,
item2: "hello",
item3: Immutable.Map({
item4: 2,
item5: true
})
});
你可以这样做:
type Immutable<T> = {
readonly [K in keyof T]: Immutable<T[K]>;
};
// Then you could write your interface
interface Person {
name: string;
lastName: string;
address: {
street: string;
zipCode: number;
}
}
const person: Immutable<Person> = {
name: 'joe',
lastName: 'smith',
address: {
street: 'smith street',
zipCode: 55555
}
}
// Then when you try to mutate, typescript should throw an error that it is a readonly property
person.name = 'alice';
person.address.street = 'ano'
类型不可变={
只读[K in keyof T]:不可变;
};
//然后就可以编写接口了
接口人{
名称:字符串;
lastName:string;
地址:{
街道:字符串;
zipCode:数字;
}
}
const person:不可变={
名字:'乔',
姓氏:“史密斯”,
地址:{
街道:“史密斯街”,
邮编:55555
}
}
//然后,当您尝试变异时,typescript应该抛出一个错误,即它是只读属性
person.name='alice';
person.address.street='ano'
这篇文章的作者在这里链接:您可以做如下操作:
type Immutable<T> = {
readonly [K in keyof T]: Immutable<T[K]>;
};
// Then you could write your interface
interface Person {
name: string;
lastName: string;
address: {
street: string;
zipCode: number;
}
}
const person: Immutable<Person> = {
name: 'joe',
lastName: 'smith',
address: {
street: 'smith street',
zipCode: 55555
}
}
// Then when you try to mutate, typescript should throw an error that it is a readonly property
person.name = 'alice';
person.address.street = 'ano'
类型不可变={
只读[K in keyof T]:不可变;
};
//然后就可以编写接口了
接口人{
名称:字符串;
lastName:string;
地址:{
街道:字符串;
zipCode:数字;
}
}
const person:不可变={
名字:'乔',
姓氏:“史密斯”,
地址:{
街道:“史密斯街”,
邮编:55555
}
}
//然后,当您尝试变异时,typescript应该抛出一个错误,即它是只读属性
person.name='alice';
person.address.street='ano'
这篇文章的作者在这里链接:我不熟悉immutable.js框架,但我建议使用标准的JavaScript映射。Typescript具有类型
ReadonlyMap
,它基本上从map对象中删除所有setter。对象本身实际上不可输入(也就是说,没有运行时错误),但是如果您尝试添加/删除/更新值,typescript编译器会抱怨
const myMap:ReadonlyMap=新映射([
['item1','foo'],
['item2','bar']
]);
console.log(myMap.get('item1');//我会记录福的
myMap.set('item1','foobar');//类型只读映射上不存在属性集
有点离题,但我建议重新思考地图结构。当然string | null
可以。但是string | null | ReadonlyMap
听起来确实像wird map(对我来说)
另外,如果您想阅读地图文档,请参阅。我不熟悉immutable.js框架,但我建议使用标准的JavaScript地图。Typescript具有类型
ReadonlyMap
,它基本上从map对象中删除所有setter。对象本身实际上不可输入(也就是说,没有运行时错误),但是如果您尝试添加/删除/更新值,typescript编译器会抱怨
const myMap:ReadonlyMap=新映射([
['item1','foo'],
['item2','bar']
]);
console.log(myMap.get('item1');//我会记录福的
myMap.set('item1','foobar');//类型只读映射上不存在属性集
有点离题,但我建议重新思考地图结构。当然string | null
可以。但是string | null | ReadonlyMap
听起来确实像wird map(对我来说)
另外,如果您愿意阅读,请参阅地图文档