Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Typescript将不可变映射正确转换为严格类型_Typescript_Immutability_Immutable.js - Fatal编程技术网

如何使用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

如何将以下内容从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]>;
};

// 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(对我来说)

另外,如果您愿意阅读,请参阅地图文档