假设我有一个由键和true/false值组成的对象,这些键和值可以打开或关闭日志记录以及一个日志函数
const LoggedKeys = {
logged: true,
ignored: false,
}
function log(key, msg) {
if(LoggedKeys[key]) console.log(msg);
}
log('logged', "This should be logged")
log('ignored', "That should not do anything")
是否可以编写TypeScript版本,使类型为false键在编译期间不生成函数调用或生成空函数?(只是为了保存在LoggedKey为false的情况下多次调用日志函数的性能缺陷)
例如:
interface LoggedKeys {
logged: true,
ignored: false,
}
type MyLogFunction<T keyof LoggedKeys> = LoggedKeys[T] extends true? (msg) => void: never
// I have no idea how it would look like
// and usage could look like
log<logged>("That would generate proper log function")
log<ignored>("That would be erased during compilation or generate fake empty function during compilation")
1条答案
按热度按时间myzjeezk1#
TypeScript中存在的任何JavaScript语法也将存在于发出的JavaScript中。
将 * 必然 * 导致JavaScript
使用标准的TypeScript是没有办法的,你可以把编译过程看作是做一件事情,主要是;删除TypeScript语法,这样剩下的就是有效的JavaScript了。实际上,没有额外的动态逻辑发生(除了一些奇怪的东西,比如枚举,它们也存在于发出的代码中)。
您必须更改
log
函数以在JavaScript中实现所需的逻辑,这可能需要传递另一个参数而不是泛型参数。