我要做的是将const
对象转换为class
,以便例如创建readonly
属性。这样可以确保值永远不变。
在我的课堂上,我试图创建一个module
属性,该属性应该定义,但始终为空。
我尝试了许多不同的事情:
public modules: Readonly<[]> = []; // Error: A tuple type element list cannot be empty.
public readonly modules: IModule[] = []; // Disallows re-assignment, but still allows things such as push, pop etc.
interface EmptyTuple {
length: 0;
}
// Types of property 'length' are incompatible. Type 'number' is not assignable to type '0'.
public modules: Readonly<EmptyTuple> = [];
由于0
是一个数字,所以最新的数字毫无意义。我真的不知道我在这里实际上在做什么,因此一些指导很完美。
我尝试查看https://github.com/Microsoft/TypeScript/issues/13126,以查看是否可以找到某种答案,但无济于事。
有人知道如何实现拥有无法修改的空数组吗?
答案 0 :(得分:3)
有人知道如何实现拥有无法修改的空数组吗?
您可以将字段键入为ReadonlyArray
,并用readonly
关键字进行标记:
class Foo {
readonly modules: ReadonlyArray<{}> = [];
}
const foo = new Foo();
foo.modules = []; //error
foo.modules.push({}) //error
答案 1 :(得分:0)
考虑到Typescript没用,您可以执行以下操作:
public modules: = any[]; // Error: A tuple type element list cannot be empty.
public readonly modules: = any[]; // Disallows re-assignment, but still allows things such as push, pop etc.
...
答案 2 :(得分:0)
TypeScript 3.0现在包括更好的元组类型支持:
type EmptyTuple = []
const empty: EmptyTuple = [] // OK
// Type '[number]' is not assignable to type '[]'.
// Types of property 'length' are incompatible.
// Type '1' is not assignable to type '0'.
const err1: EmptyTuple = [1]