🔍搜索词
github typescript decorator value type
✅可行性检查清单
- 这不会对现有的TypeScript/JavaScript代码造成破坏性改变
- 这不会改变现有JavaScript代码的运行时行为
- 这可以在不根据表达式的类型发出不同的JS的情况下实现
- 这不是一个运行时特性(例如库功能、JavaScript输出的非ECMAScript语法、JS的新语法糖等)
- 这不是要求添加一个新的实用类型: https://github.com/microsoft/TypeScript/wiki/No-New-Utility-Types
- 这个特性将与我们设计目标的其他部分一致: https://github.com/Microsoft/TypeScript/wiki/TypeScript-Design-Goals
⭐建议
这是一个要求添加一个新的实用类型的请求,因为TypeScript为装饰器上下文添加了一个,但没有为值添加一个DecoratorContext
类型对于捕获所有上下文类型来说是很好的:
function decorator(value: unknown, context: DecoratorContext) { // optionally use a more specific type.
// ...
}
但是对于 value
,没有一个很好的捕获所有类型的类型。
📃动机示例
如果我们有一个上下文捕获所有类型,为什么不也有一个值捕获所有类型,例如:
export type DecoratedValue = Constructor | Function | ClassAccessorDecoratorTarget<object, unknown> | undefined
💻用例
- 你打算用这个做什么?处理任何值类型的装饰器代码
- 目前方法的缺点是什么?我们需要自己为值制作捕获所有类型,但我们不需要为上下文这样做
- 在这段时间内你正在使用什么解决方法?我制作自己的捕获所有类型(不是那么大的问题,但我自己制作
DecoratorContext
也不是什么大事)
4条答案
按热度按时间rseugnpd1#
这不是要求添加一个新的实用程序类型:https://github.com/microsoft/TypeScript/wiki/No-New-Utility-Types
但从技术上讲,它是。
to94eoyn2#
在进行这个操作时,是否可以引入以下内容?
因为:
我们必须这样做:
编辑:哦,等等,TypeScript 是否甚至提供了任何类型保护?
装饰器返回类型很棘手。似乎没有任何内置类型可以使用。例如,我希望有类似
FieldInitializer
的:Etc 对于其他返回类型。还有一种通配符:
8ljdwjyq3#
顺便说一下,我不认为
DecoratedValue
算作通常意义上的“实用类型”;检查表中的这个点通常指的是请求类似于Partial
或Omit
类型的请求,目的是操作其他类型(即实用类型 = 类型实用)。我认为这里要求的不再是一个实用类型,就像ArrayBufferLike
一样。当然,是否会有TS维护者想要添加可以直接用联合体表示的新命名类型还不确定。但这个决定可能比通常对实用类型的一刀切禁令更务实。
vjrehmav4#
哦,等等,TypeScript甚至没有提供任何类型保护吗?
不,而且它不太可能有。除了像
enum
这样的传统特性之外,TS不会在运行时执行任何操作。因此,在这个清单的这一点上这不是一个运行时特性(例如库功能、JavaScript输出的非ECMAScript语法、JS的新语法糖等)
类型保护必须已经指定在ECMAScript中(因此由JS引擎提供)或者来自外部库。