这里整理了一套 typescript 类型范式,类型推断源码,求支持一下。 Cocos Store Dashboard
├─array
│ Append.ts
│ ArrayAt.ts
│ ArrayChange.ts
│ ArrayConcat.ts
│ ArrayIndex.ts
│ ArrayInheritWith.ts
│ ArrayKeys.ts
│ ArrayReplaceAt.ts
│ ArrayReverse.ts
│ ArrayStartsWith.ts
│ ArrayToBigInt.ts
│ ArrayToEnum.ts
│ ArrayToNestedObject.ts
│ ArrayToNumber.ts
│ ArrayToObject.ts
│ ArrayToStringUnion.ts
│ ArrayToUnion.ts
│ ArrayType.ts
│ ArrayValueByIndex.ts
│ BuildArray.ts
│ Chunk.ts
│ Combination.ts
│ CombKeys.ts
│ ConstructTuple.ts
│ CountElementNumberToObject.ts
│ CountReversePairs.ts
│ Drop.ts
│ DropRight.ts
│ ExcludeFirst.ts
│ ExcludeLast.ts
│ Fill.ts
│ Filter.ts
│ FilterGreater.ts
│ FilterGreaterEqual.ts
│ FilterGreaterEqualNumber.ts
│ FilterGreaterEqualString.ts
│ FilterGreaterNumber.ts
│ FilterGreaterString.ts
│ FilterLower.ts
│ FilterLowerEqual.ts
│ FilterLowerEqualNumber.ts
│ FilterLowerEqualString.ts
│ FilterLowerNumber.ts
│ FilterLowerString.ts
│ FilterNumber.ts
│ FilterOut.ts
│ FindAllIndex.ts
│ FindDuplicates.ts
│ FindOnly.ts
│ First.ts
│ FirstAsTuple.ts
│ FizzBuzz.ts
│ Flatten.ts
│ FlattenDepth.ts
│ GapsOf.ts
│ Head.ts
│ Includes.ts
│ InclusiveRange.ts
│ index.ts
│ IndexOf.ts
│ Insert.ts
│ InsertFirst.ts
│ InsertLast.ts
│ Intersection.ts
│ IteratorArray.ts
│ IteratorNext.ts
│ IteratorPrev.ts
│ Join.ts
│ Last.ts
│ LastIndexOf.ts
│ Length.ts
│ Maximum.ts
│ MiddleElement.ts
│ Minimum.ts
│ PartialGaps.ts
│ Permutation.ts
│ PermutationIndex.ts
│ PermutationsOfTuple.ts
│ Pop.ts
│ Prepend.ts
│ Push.ts
│ ReplaceFirst.ts
│ Shift.ts
│ Slice.ts
│ Sort.ts
│ SortNumber.ts
│ SortString.ts
│ Subsequence.ts
│ Tail.ts
│ Take.ts
│ TupleType.ts
│ Unique.ts
│ Unshift.ts
│ Without.ts
│ Zip.ts
│
├─assert
│ Expect.ts
│ ExpectFalse.ts
│ ExpectTrue.ts
│ index.ts
│
├─calculate
│ Absolute.ts
│ Add.ts
│ AddFloat.ts
│ AddOne.ts
│ AddOneReverse.ts
│ AddReverse.ts
│ And.ts
│ BinaryAdd.ts
│ BinaryAddOne.ts
│ BinaryAddOneReverse.ts
│ BinaryAnd.ts
│ BinaryOr.ts
│ BinarySubOne.ts
│ BinarySubOneReverse.ts
│ BinaryToDecimal.ts
│ BinaryToOnesComplement.ts
│ BinaryToTwosComplement.ts
│ BinaryTwosComplementToSignMagnitude.ts
│ BinaryXor.ts
│ Compare.ts
│ CompareArrayLength.ts
│ CompareNumber.ts
│ CompareString.ts
│ CompareStringLength.ts
│ DecimalToBinary.ts
│ DivideBy2.ts
│ DivideXEN.ts
│ Factorial.ts
│ Fibonacci.ts
│ HexToDecimal.ts
│ If.ts
│ index.ts
│ LogicalTable.ts
│ Mod.ts
│ Multiply.ts
│ MutiplyXEN.ts
│ NormalizeIndex.ts
│ NormalizeInsertIndex.ts
│ Not.ts
│ NotEqual.ts
│ OctalToDecimal.ts
│ Or.ts
│ PascalsTriangle.ts
│ Pow.ts
│ Rem.ts
│ Square.ts
│ Sub.ts
│ SubFloat.ts
│ SubOne.ts
│ SubOneReverse.ts
│ SubReverse.ts
│ Sum.ts
│ Ternary.ts
│ TowerOfHanoi.ts
│ Transpose.ts
│ Triangular.ts
│ Trunc.ts
│ Xor.ts
│
├─decorator
│ ClassDecorator.ts
│ index.ts
│ MethodDecorator.ts
│ ParameterDecorator.ts
│ PropertyDecorator.ts
│
├─function
│ AppendArgument.ts
│ ClassPublicKeys.ts
│ Constructor.ts
│ ConstructorParameters.ts
│ Curry.ts
│ FlipArguments.ts
│ FunctionType.ts
│ index.ts
│ InstanceType.ts
│ IntersectParameters.ts
│ Mixin.ts
│ OmitThisParameter.ts
│ Parameters.ts
│ ReturnType.ts
│ ThisParameterType.ts
│
├─logic
│ Any.ts
│ Extends.ts
│ index.ts
│ Is.ts
│ IsAll.ts
│ IsAllNumber.ts
│ IsAllString.ts
│ IsAny.ts
│ IsArrayEmpty.ts
│ IsBigintConvertToNumber.ts
│ IsBinaryString.ts
│ IsCommonYear.ts
│ IsDivideBy100.ts
│ IsDivideBy3.ts
│ IsDivideBy4.ts
│ IsDivideBy400.ts
│ IsDivideBy5.ts
│ IsEqual.ts
│ IsEqualNumber.ts
│ IsEven.ts
│ IsExtends.ts
│ IsFalse.ts
│ IsFixedStringLiteralType.ts
│ IsFractional.ts
│ IsGreater.ts
│ IsGreaterEqual.ts
│ IsGreaterEqualNumber.ts
│ IsGreaterEqualString.ts
│ IsGreaterNumber.ts
│ IsGreaterString.ts
│ IsHexString.ts
│ IsInteger.ts
│ IsLeapYear.ts
│ IsLetter.ts
│ IsLike.ts
│ IsLower.ts
│ IsLowerEqual.ts
│ IsLowerEqualNumber.ts
│ IsLowerEqualString.ts
│ IsLowerNumber.ts
│ IsLowerString.ts
│ IsMutableKey.ts
│ IsNegativeInteger.ts
│ IsNegativeNumber.ts
│ IsNever.ts
│ IsNone.ts
│ IsNonLetter.ts
│ IsNotAny.ts
│ IsNotEqual.ts
│ IsNotNone.ts
│ IsNull.ts
│ IsNumber.ts
│ IsNumberLike.ts
│ IsOctalString.ts
│ IsOdd.ts
│ IsOptionalKey.ts
│ IsPalindrome.ts
│ IsPartialKey.ts
│ IsPositiveInteger.ts
│ IsPositiveNumber.ts
│ IsPrimary.ts
│ IsPrimaryNumber.ts
│ IsPrimaryString.ts
│ IsReadOnlyKey.ts
│ IsRepeatedChars.ts
│ IsRepeatedTuple.ts
│ IsRequiredKey.ts
│ IsSomeTrue.ts
│ IsString.ts
│ IsTrue.ts
│ IsTuple.ts
│ IsTupleAllMatch.ts
│ IsTupleEmpty.ts
│ IsTupleNotEmpty.ts
│ IsTwoNumberSum.ts
│ IsUndefined.ts
│ IsUnion.ts
│ IsUnknown.ts
│ IsValidArgs.ts
│ IsValidDate.ts
│ IsValidSudoku.ts
│ IsZero.ts
│
├─object
│ AnyObject.ts
│ AppendToObject.ts
│ Assign.ts
│ Camelize.ts
│ CapitalizeNestObjectKeys.ts
│ Chainable.ts
│ ChangeByMapTypes.ts
│ Clone.ts
│ CopyKeys.ts
│ DeepObjectToUniq.ts
│ Diff.ts
│ DiffKeys.ts
│ ExtractToObject.ts
│ FindKeyByValue.ts
│ FindValueByKey.ts
│ Flip.ts
│ GetKeyPaths.ts
│ GetMutable.ts
│ GetPartial.ts
│ GetPathType.ts
│ GetPathValue.ts
│ GetRequired.ts
│ index.ts
│ Invert.ts
│ JsonScheme.ts
│ LookUp.ts
│ Merge.ts
│ MergeAll.ts
│ MergeInsertions.ts
│ MergeOverload.ts
│ MergeParams.ts
│ Mutable.ts
│ MutableDeep.ts
│ MutableKeys.ts
│ NonNeverKeys.ts
│ ObjectEntries.ts
│ ObjectFromEntries.ts
│ ObjectPath.ts
│ Omit.ts
│ OmitByType.ts
│ OmitDeep.ts
│ OptionalKeys.ts
│ OptionalToRequiredUndefined.ts
│ OptionalUndefined.ts
│ Partial.ts
│ PartialByKeys.ts
│ PartialKeys.ts
│ Pick.ts
│ PickByType.ts
│ PickDeep.ts
│ Readonly.ts
│ ReadonlyDeep.ts
│ ReadonlyKeys.ts
│ Record.ts
│ RemoveIndexSignature.ts
│ RemovePrivateProps.ts
│ RemoveUndefinedNull.ts
│ ReplaceKeys.ts
│ Required.ts
│ RequiredByKeys.ts
│ RequiredKeys.ts
│ SetProperty.ts
│ StripNever.ts
│ ToPrimitive.ts
│ TraversalBreadthFirst.ts
│ TraversalInorder.ts
│ TraversalPostorder.ts
│ TraversalPreorder.ts
│ ValueOf.ts
│ VueBasicProps.ts
│ VuePinia.ts
│ VueSimple.ts
│
├─promise
│ Awaited.ts
│ index.ts
│ PromiseAll.ts
│ PromiseConstructorLike.ts
│ PromiseType.ts
│
├─string
│ AllCombinations.ts
│ BEM.ts
│ CamelCase.ts
│ Capitalize.ts
│ CapitalizeWords.ts
│ CharAt.ts
│ DropChar.ts
│ DropString.ts
│ DynamicRoute.ts
│ EndsWith.ts
│ FindSubstringIndex.ts
│ FirstUniqueCharIndex.ts
│ Format.ts
│ index.ts
│ KebabCase.ts
│ LengthDecode.ts
│ LengthEncode.ts
│ LengthOfString.ts
│ NormalizePropertyKey.ts
│ PadLeft.ts
│ PadRight.ts
│ ParsePrintFormat.ts
│ ParseQueryString.ts
│ ParseUrlParams.ts
│ PercentageParser.ts
│ Repeat.ts
│ Replace.ts
│ ReplaceAll.ts
│ ReplaceAt.ts
│ SnakeCase.ts
│ Split.ts
│ StartWith.ts
│ StringFirst.ts
│ StringIndexOf.ts
│ StringJoin.ts
│ StringLast.ts
│ StringLastIndexOf.ts
│ StringReverse.ts
│ StringToArray.ts
│ StringToUnion.ts
│ StringUnionCombination.ts
│ SubString.ts
│ Trim.ts
│ TrimLeft.ts
│ TrimNumberAllSign.ts
│ TrimNumberMultiSignAndZero.ts
│ TrimRight.ts
│ UnCapitalize.ts
│
├─type
│ ASCII.ts
│ ASCII_TYPE.ts
│ ASCII_VALUE.ts
│ BinaryType.ts
│ BinaryTypeNext.ts
│ BinaryTypePrev.ts
│ Cast.ts
│ Comparison.ts
│ DateCommonYear.ts
│ DateLeapYear.ts
│ Day28Type.ts
│ Day29Type.ts
│ Day30Type.ts
│ Day31Type.ts
│ Digit.ts
│ DigitNext.ts
│ DigitPrev.ts
│ DivideBy2Type.ts
│ Falsy.ts
│ FalsyType.ts
│ GetAsciiValue.ts
│ GetHexCharValue.ts
│ GetTypeName.ts
│ GetTypeValue.ts
│ HexType.ts
│ HexValue.ts
│ Identify.ts
│ index.ts
│ Intersect.ts
│ JsonParser.ts
│ MonthType.ts
│ MonthTypeDay30.ts
│ MonthTypeDay31.ts
│ Naked.ts
│ NonNullable.ts
│ NotNaked.ts
│ Null.ts
│ NumberLike.ts
│ NumberRange.ts
│ OctalType.ts
│ Placeholder.ts
│ PrimaryType.ts
│ PropertyKey.ts
│ Tag.ts
│ ToBigInt.ts
│ ToNumber.ts
│ ToNumberString.ts
│ ToString.ts
│ Tuple.ts
│ Type.ts
│ Unbox.ts
│ Undefined.ts
│ Union.ts
│ PrimaryValue.ts
│ Whitespace.ts
│
├─union
│ CartesianProduct.ts
│ DistributeUnions.ts
│ Exclude.ts
│ Extract.ts
│ index.ts
│ UnionFirst.ts
│ UnionIncludes.ts
│ UnionLast.ts
│ UnionPermutation.ts
│ UnionReplace.ts
│ UnionToArray.ts
│ UnionToIntersection.ts
│ UnionToIntersectionArgumentFunction.ts
export type Mixin<T extends Constructor[]> = Constructor<UnionToIntersection<InstanceType<T[number]>>> & UnionToIntersection<T[number]>
/**
* 多继承
* @param {T} base 继承构造函数的基类(继承构造函数)
* @param {Array<T>} mixins 其他基类(不继承构造函数)
* @returns
*/
export function Mixin<T extends Constructor[]>(...mixins: T): Mixin<T>;
export function Mixin<T extends Constructor[]>(base: T, ...mixins: T) {
const Base: any = base;
class Mix extends Base {
constructor(...args: any[]) {
super();
mixins.forEach((mixin) => {
const other = new mixin(...args);
Object.assign(this, other); // This line is the only change
});
}
}
const mergeDesc: any = {};
function copyProperties(target: any, source: any) {
for (let key of Reflect.ownKeys(source)) {
if (key !== 'constructor' && key !== 'prototype' && key !== 'name') {
let desc = Object.getOwnPropertyDescriptor(source, key);
if (desc) {
mergeDesc[key] = mergeDesc[key] || [];
mergeDesc[key].push(desc.value);
Object.defineProperty(target, key, desc);
}
}
}
}
for (let mixin of mixins) {
copyProperties(Mix, mixin); // 拷贝静态属性
copyProperties(Mix.prototype, mixin.prototype); // 拷贝原型属性
}
for (const key in mergeDesc) {
const fns = mergeDesc[key];
Object.defineProperty(Mix.prototype, key, {
configurable: true,
enumerable: true,
writable: true,
value(...args: any[]) {
const context = this;
fns.forEach(function (fn: Function) {
fn.call(context, ...args);
});
},
});
}
return Mix;
}
if (DEV) {
class A {
printA() {
console.log("A");
}
static printAA() {
console.log("AA");
}
}
class B {
printB() {
console.log("B");
}
static printBB() {
console.log("BB");
}
}
class C extends Mixin(A, B) {
printC() {
this.printA(); // 类型提示
this.printB(); // 类型提示
}
static printCC() {
C.printAA(); // 类型提示
C.printBB(); // 类型提示
}
}
new C().printC();
C.printCC();
}