本文整理汇总了TypeScript中collection-utils.setFilter函数的典型用法代码示例。如果您正苦于以下问题:TypeScript setFilter函数的具体用法?TypeScript setFilter怎么用?TypeScript setFilter使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了setFilter函数的7个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于我们的系统推荐出更棒的TypeScript代码示例。
示例1: separateNamedTypes
export function separateNamedTypes(types: Iterable<Type>): SeparatedNamedTypes {
const objects = (setFilter(types, t => t.kind === "object" || t.kind === "class") as Set<
ObjectType
>) as ReadonlySet<ObjectType>;
const enums = (setFilter(types, t => t instanceof EnumType) as Set<EnumType>) as ReadonlySet<EnumType>;
const unions = (setFilter(types, t => t instanceof UnionType) as Set<UnionType>) as ReadonlySet<UnionType>;
return { objects, enums, unions };
}
开发者ID:nrkn,项目名称:quicktype,代码行数:9,代码来源:TypeUtils.ts
示例2: flattenUnions
export function flattenUnions(
graph: TypeGraph,
stringTypeMapping: StringTypeMapping,
conflateNumbers: boolean,
makeObjectTypes: boolean,
debugPrintReconstitution: boolean
): [TypeGraph, boolean] {
let needsRepeat = false;
function replace(types: ReadonlySet<Type>, builder: GraphRewriteBuilder<Type>, forwardingRef: TypeRef): TypeRef {
const unionBuilder = new UnifyUnionBuilder(builder, makeObjectTypes, true, trefs => {
assert(trefs.length > 0, "Must have at least one type to build union");
trefs = trefs.map(tref => builder.reconstituteType(derefTypeRef(tref, graph)));
if (trefs.length === 1) {
return trefs[0];
}
needsRepeat = true;
return builder.getUnionType(emptyTypeAttributes, new Set(trefs));
});
return unifyTypes(types, emptyTypeAttributes, builder, unionBuilder, conflateNumbers, forwardingRef);
}
const allUnions = setFilter(graph.allTypesUnordered(), t => t instanceof UnionType) as Set<UnionType>;
const nonCanonicalUnions = setFilter(allUnions, u => !u.isCanonical);
let foundIntersection = false;
const groups = makeGroupsToFlatten(nonCanonicalUnions, members => {
messageAssert(members.size > 0, "IRNoEmptyUnions", {});
if (!iterableSome(members, m => m instanceof IntersectionType)) return true;
// FIXME: This is stupid. `flattenUnions` returns true when no more union
// flattening is necessary, but `resolveIntersections` can introduce new
// unions that might require flattening, so now `flattenUnions` needs to take
// that into account. Either change `resolveIntersections` such that it
// doesn't introduce non-canonical unions (by using `unifyTypes`), or have
// some other way to tell whether more work is needed that doesn't require
// the two passes to know about each other.
foundIntersection = true;
return false;
});
graph = graph.rewrite("flatten unions", stringTypeMapping, false, groups, debugPrintReconstitution, replace);
// console.log(`flattened ${nonCanonicalUnions.size} of ${unions.size} unions`);
return [graph, !needsRepeat && !foundIntersection];
}
开发者ID:nrkn,项目名称:quicktype,代码行数:44,代码来源:FlattenUnions.ts
示例3: removeNullFromUnion
export function removeNullFromUnion(
t: UnionType,
sortBy: boolean | ((t: Type) => any) = false
): [PrimitiveType | null, ReadonlySet<Type>] {
function sort(s: ReadonlySet<Type>): ReadonlySet<Type> {
if (sortBy === false) return s;
if (sortBy === true) return setSortBy(s, m => m.kind);
return setSortBy(s, sortBy);
}
const nullType = t.findMember("null");
if (nullType === undefined) {
return [null, sort(t.members)];
}
return [nullType as PrimitiveType, sort(setFilter(t.members, m => m.kind !== "null"))];
}
开发者ID:nrkn,项目名称:quicktype,代码行数:16,代码来源:TypeUtils.ts
示例4: makeTransformations
export function makeTransformations(ctx: RunContext, graph: TypeGraph, targetLanguage: TargetLanguage): TypeGraph {
const transformedTypes = setFilter(graph.allTypesUnordered(), t => {
if (targetLanguage.needsTransformerForType(t)) return true;
if (!(t instanceof UnionType)) return false;
const stringMembers = t.stringTypeMembers;
if (stringMembers.size <= 1) return false;
return iterableSome(stringMembers, m => targetLanguage.needsTransformerForType(m));
});
function replace(
setOfOneUnion: ReadonlySet<Type>,
builder: GraphRewriteBuilder<Type>,
forwardingRef: TypeRef
): TypeRef {
const t = defined(iterableFirst(setOfOneUnion));
if (t instanceof UnionType) {
return replaceUnion(t, builder, forwardingRef, transformedTypes, ctx.debugPrintTransformations);
}
if (t instanceof ArrayType) {
return replaceArray(t, builder, forwardingRef, ctx.debugPrintTransformations);
}
if (t instanceof EnumType) {
return replaceEnum(t, builder, forwardingRef, ctx.debugPrintTransformations);
}
if (isPrimitiveStringTypeKind(t.kind)) {
return replaceTransformedStringType(
t as PrimitiveType,
t.kind,
builder,
forwardingRef,
ctx.debugPrintTransformations
);
}
return panic(`Cannot make transformation for type ${t.kind}`);
}
const groups = Array.from(transformedTypes).map(t => [t]);
return graph.rewrite(
"make-transformations",
ctx.stringTypeMapping,
false,
groups,
ctx.debugPrintReconstitution,
replace
);
}
开发者ID:nrkn,项目名称:quicktype,代码行数:46,代码来源:MakeTransformations.ts
示例5: visitComponent
function visitComponent(component: ReadonlySet<Type>): void {
if (visitedComponents.has(component)) return;
visitedComponents.add(component);
// console.log(`visiting component ${componentName(component)}`);
const declarationNeeded = setFilter(component, needsDeclaration);
// 1. Only one node in the cycle needs a declaration, in which
// case it's the breaker, and no forward declaration is necessary.
if (declarationNeeded.size === 1) {
declarations.push({ kind: "define", type: defined(iterableFirst(declarationNeeded)) });
return;
}
// 2. No node in the cycle needs a declaration, but it's also
// the only node, so we don't actually need a declaration at all.
if (declarationNeeded.size === 0 && component.size === 1) {
return;
}
// 3. No node in the cycle needs a declaration, but there's more.
// than one node total. We have to pick a node to make a
// declaration, so we can pick any one. This is not a forward
// declaration, either.
if (declarationNeeded.size === 0) {
declarations.push({ kind: "define", type: defined(iterableFirst(component)) });
return;
}
// 4. More than one node needs a declaration, and we don't need
// forward declarations. Just declare all of them and be done
// with it.
if (canBeForwardDeclared === undefined) {
for (const t of declarationNeeded) {
declarations.push({ kind: "define", type: t });
}
return;
}
// 5. More than one node needs a declaration, and we have
// to make forward declarations. We do the simple thing and first
// forward-declare all forward-declarable types in the SCC. If
// there are none, we're stuck. If there are, we take them out of
// the component and try the whole thing again recursively. Then
// we declare the types we previously forward-declared.
const forwardDeclarable = setFilter(component, canBeForwardDeclared);
if (forwardDeclarable.size === 0) {
return messageError("IRNoForwardDeclarableTypeInCycle", {});
}
for (const t of forwardDeclarable) {
declarations.push({ kind: "forward", type: t });
}
setUnionInto(forwardedTypes, forwardDeclarable);
const rest = setSubtract(component, forwardDeclarable);
const restGraph = new Graph(rest, true, t => setIntersect(childrenOfType(t), rest));
processGraph(restGraph, false);
for (const t of forwardDeclarable) {
declarations.push({ kind: "define", type: t });
}
return;
}
开发者ID:nrkn,项目名称:quicktype,代码行数:62,代码来源:DeclarationIR.ts
示例6: replaceObjectType
export function replaceObjectType(
graph: TypeGraph,
stringTypeMapping: StringTypeMapping,
_conflateNumbers: boolean,
leaveFullObjects: boolean,
debugPrintReconstitution: boolean
): TypeGraph {
function replace(
setOfOneType: ReadonlySet<ObjectType>,
builder: GraphRewriteBuilder<ObjectType>,
forwardingRef: TypeRef
): TypeRef {
const o = defined(iterableFirst(setOfOneType));
const attributes = o.getAttributes();
const properties = o.getProperties();
const additionalProperties = o.getAdditionalProperties();
function reconstituteProperties(): ReadonlyMap<string, ClassProperty> {
return mapMap(properties, cp =>
builder.makeClassProperty(builder.reconstituteTypeRef(cp.typeRef), cp.isOptional)
);
}
function makeClass(): TypeRef {
return builder.getUniqueClassType(attributes, true, reconstituteProperties(), forwardingRef);
}
function reconstituteAdditionalProperties(): TypeRef {
return builder.reconstituteType(defined(additionalProperties));
}
if (additionalProperties === undefined) {
return makeClass();
}
if (properties.size === 0) {
return builder.getMapType(attributes, reconstituteAdditionalProperties(), forwardingRef);
}
if (additionalProperties.kind === "any") {
// FIXME: Warn that we're losing additional property semantics.
builder.setLostTypeAttributes();
return makeClass();
}
// FIXME: Warn that we're losing class semantics.
const propertyTypes = setMap(properties.values(), cp => cp.type).add(additionalProperties);
let union = builder.lookupTypeRefs(Array.from(propertyTypes).map(t => t.typeRef));
if (union === undefined) {
const reconstitutedTypes = setMap(propertyTypes, t => builder.reconstituteType(t));
union = builder.getUniqueUnionType(emptyTypeAttributes, new Set(reconstitutedTypes));
// This is the direct unification alternative. Weirdly enough, it is a tiny
// bit slower. It gives the same results.
/*
union = unifyTypes(
propertyTypes,
combineTypeAttributes(propertyTypes.toArray().map(t => t.getAttributes())),
builder,
unionBuilderForUnification(builder, false, false, false, conflateNumbers),
conflateNumbers
);
*/
}
return builder.getMapType(attributes, union, forwardingRef);
}
const allObjectTypes = setFilter(graph.allTypesUnordered(), t => t.kind === "object") as Set<ObjectType>;
const objectTypesToReplace = leaveFullObjects
? setFilter(allObjectTypes, o => o.getProperties().size === 0 || o.getAdditionalProperties() === undefined)
: allObjectTypes;
const groups = Array.from(objectTypesToReplace).map(t => [t]);
return graph.rewrite("replace object type", stringTypeMapping, false, groups, debugPrintReconstitution, replace);
}
开发者ID:nrkn,项目名称:quicktype,代码行数:75,代码来源:ReplaceObjectType.ts
示例7: stringTypeMembers
get stringTypeMembers(): ReadonlySet<Type> {
return setFilter(this.members, t => isPrimitiveStringTypeKind(t.kind) || t.kind === "enum");
}
开发者ID:nrkn,项目名称:quicktype,代码行数:3,代码来源:Type.ts
注:本文中的collection-utils.setFilter函数示例由纯净天空整理自Github/MSDocs等源码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。 |
请发表评论