gpt4 book ai didi

typescript :使用静态内部类的类型

转载 作者:搜寻专家 更新时间:2023-10-30 20:41:58 29 4
gpt4 key购买 nike

我正在尝试编写一个向其使用者公开内部数据结构的类,该类本身将使用的数据结构。

例子:

class Outer {
static Inner = class {
inInner: number
};

constructor(public inner: Outer.Inner) { }
}

这里的问题是 Outer.Inner 没有被识别为一个类型。

我找到的唯一答案是 workarounds (in Typescript playground) .我想知道是否有任何优雅的方法可以做到这一点。


用例:

我有一堆在客户端和服务器之间通过 WebSockets 发送的 Action 。每个 Action 都有自己的 Data 内部类。 Data 类本身在服务器的其他地方使用。我可以将其分成两个类(或一个接口(interface)),如 Action1Action1Data,但我认为 Action1.Data 更具可读性设计。

最佳答案

您的第二个“解决方法”是首选方法:

class Outer {
constructor(public inner: Outer.Inner) { }
}

namespace Outer {
export class Inner {
inInner: number
};
}

// Spec
let outer1 = new Outer({ inInner: 3 });

let outerInner = new Outer.Inner();
let outer2 = new Outer(outerInner);

TypeScript 中有三种类型的声明:命名空间、类型和值。您可以使用 namespace 来组织类型和值。

http://www.typescriptlang.org/docs/handbook/declaration-merging.html

它不会降低可读性,因为 TypeScript 中没有“内部类”的概念。

请记住,class 语法只是 es5 原型(prototype)继承的糖分。你将如何在原型(prototype)继承中表示内部类?你把它作为一个实例变量吗?或者在 Outer.prototype.???

在 es5 中它最终是这样的:

var Outer = function Outer(...) { ... }
Outer.Inner = function Inner() { ... }

如果你看一下,Outer.Inner 中的 Outer 只是作为一个“命名空间”来保存 Inner 类。

关于 typescript :使用静态内部类的类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42864291/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com