【发布时间】:2020-03-09 01:30:56
【问题描述】:
我有一个 Transformer 接口:
interface Transformer<K> {
type: string,
apply<K>(data: K) : K
}
我想创建 2 个扩展 Transformer 的接口
interface NumberTransformer extends Transformer<number> {
type: 'number',
apply<number>(data: number) : number
}
interface StringTransformer extends Transformer<string> {
type: 'string',
apply<string>(data: string) : string
}
这会引发 2 个 TS 错误 (TS6133) 'string'/'number' is declared but its value is never read,我不明白为什么
然后,在 Transformer[] 列表中,我希望能够使用 type 参数作为类型保护,例如
const a : DataTransformer<??>[] = [{
type: 'number',
apply: (n :number) => n * 10
},
{
type: 'string',
apply: (str :string) => str.substr(0,1)
}];
a.forEach(s => {
if (s.type === 'string')
//s.apply is string => string type
});
但是我不知道a应该是什么类型? DataTransformer<any>?
【问题讨论】:
标签: typescript typescript-generics