我正在使用winston logger和wnat进行流式输入。但是我不知道该传递什么。
我的记录器:
const logger = createLogger({
...
});
Missing type annotation for `T`. `T` is a type parameter declared in function type [1] and was implicitly instantiated
at call of `createLogger` [2].
...
startup/logger.js:35:16
v-------------
35| const logger = createLogger({
References:
flow-typed/npm/winston_v3.x.x.js:98:19
98| createLogger: <T>($winstonLoggerConfig<T>) => $winstonLogger<T>,
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [1]
我也在流类型库中找到了这个:
declare type $winstonLoggerConfig<T: $winstonLevels> = {
exitOnError?: boolean,
format?: $winstonFormat,
level?: $Keys<T>,
levels?: T,
transports?: Array<$winstonTransport>
};
declare type $winstonLogger<T: $winstonLevels> = {
[$Keys<T>]: (message: string, meta?: Object) => void,
add: $winstonTransport => void,
clear: () => void,
configure: ($winstonLoggerConfig<T>) => void,
log: (message: $winstonInfo<T>) => void,
remove: $winstonTransport => void
};
那我该怎么办呢?
最佳答案
我不知道错误来自哪里,但是我可以解释T
是什么。
这里的T
是generic type。当您想限制类型但不要太多时,这很有用。例如,假设您有一个Bag
类型:
type Bag = {
name: string,
content: Array<number>
}
您可能会发现限制性太强,仅将数字放在袋子中,可以说您想在某些袋子中放入字符串而在其他袋子中放入数字,然后将类型更改为:
type NumberBag = {
name: string,
content: Array<number>
}
type StringBag = {
name: string,
content: Array<string>
}
但是,执行此操作的更好方法是仅对所需内容进行约束,在此,我们真正需要的约束是“一个袋子只包含一种东西”(
string
或number
)。这是泛型类型有用的地方:type Bag<GenericType> = {
name: string,
content: Array<GenericType>
}
现在您可能需要更具体一点,假设您只希望袋子中包含数字或字符串(就像我们之前所做的那样):
type Bag<GenericType: number | string> = {
name: string,
content: Array<GenericType>
}
好的,现在假设您要声明一个新包:
const firstBag: Bag = {
name: "Integer bag",
content: [1,3,4]
};
如果仅执行此操作,则会出现一个(流程)错误,提示:
它所指的类型参数是通用类型(定义了包中的内容)。
换句话说,这意味着不存在“ Bag ”,没有“ Bag ”,并且需要定义“事物”。因此,在创建Bag时,您需要指定要使用的确切Bag类型:
const firstBag: Bag<number> = {
name: "Integer bag",
content: [1,3,4]
};
对于函数和类,其工作原理相同,它们都可以通过通用类型进行参数化。
就您而言,您似乎拥有附加了通用类型的
createLogger
函数。此通用类型也被约束为$winstonLevels
(这与我们用于包装袋的number | string
等效)。但是我认为在此不指定类型不应该是类型错误,您是否有函数createLogger
的声明?玩具示例的代码是here。
编辑:顺便说一下,您使用的是哪个版本的流程?
关于javascript - 在Winston v3中,T There <T>($ winstonLoggerConfig <T>)=> $ winstonLogger <T>是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/54619401/