【发布时间】:2019-12-21 09:42:09
【问题描述】:
我有以下自定义类型和接口:
export type MultiMedia = 'image' | 'audio' | 'video';
export type FieldType = 'string' | 'number' | 'boolean' | MultiMedia;
export interface Field {
name: string,
label: string,
type: FieldType,
validator: <T>(val: T) => boolean,
bounds: { lower: number; upper: number }
}
export interface Theme {
title: string,
logoPath: string,
tags: string[],
fields: Field[]
}
由于字段类型各不相同,我已将validator 定义为Field 接口中的通用方法。当我想创建一个实现 Field 接口打字稿抱怨的对象文字时
类型 '(val: string) => boolean' 不可分配给类型 '(val: T) => boolean。
const fields: Field[] = [
{
name: "firstName",
label: "First Name",
type: "string",
bounds: { lower: 1, upper: 1 },
validator: (val: string) => {
return val.length > 20;
}
}
我可以改变Field界面如下解决问题。
export interface Field<T> {
name: string,
label: string,
type: FieldType,
validator: (val: T) => boolean,
bounds: { lower: number; upper: number }
}
然后打字稿抱怨Theme接口中的fields属性。
通用类型“字段”需要 1 个类型参数。
【问题讨论】:
-
如果
type是"audio",你想让validator接受什么?