typhoon/type 问题修复 & 功能扩展

解决BUG、新增功能、兼容多环境部署,快速响应你的开发需求

邮箱:yvsm@zunyunkeji.com | QQ:316430983 | 微信:yvsm316

typhoon/type

最新稳定版本:0.7.0

Composer 安装命令:

composer require typhoon/type

包简介

Typhoon Type System

README 文档

README

PHP Version Requirement GitHub Release PHPStan Code Coverage Mutation testing badge

Typhoon Type is an object abstraction over the modern PHP type system. Use this library to build tools that work with sophisticated types:

use function Typhoon\Type\arrayShapeT;
use function Typhoon\Type\objectT;
use function Typhoon\Type\nonEmptyListT;

$json = <<<JSON
    {
        "people": [
            {"name": "Valentin"},
            {"name": "Andrey"}
        ],
    }
    JSON;
    
final readonly class Person
{
    public function __construct(
        public string $name,
    ) {}    
}

$type = arrayShapeT([
    'people' => nonEmptyListT(objectT(Person::class)),
]);

$request = new Mapper()->map($json, $type);

Installation

composer require typhoon/type

Printing types

To print any type, use stringify():

use function Typhoon\Type\stringify;

$type = arrayShapeT([
    'people' => nonEmptyListT(objectT(Person::class)),
]);

var_dump(stringify($type));

// array{'people': non-empty-list<Person>}

Supported types

Native

Typhoon Native
nullT null
voidT void
neverT never
falseT false
trueT true
boolT bool
intT int
floatT float
stringT string
arrayT array
objectT object
objectT(Foo::class) Foo
selfT self
parentT parent
staticT static
iterableT iterable
callableT callable
resourceT resource
nullOrT(stringT) ?string
unionT(intT, stringT) int|string
intersectionT(objectT(Countable::class), objectT(Traversable::class)) Countable&Traversable
mixedT mixed

PHPDoc numbers

Typhoon PHPDoc
intT(123) 123
positiveIntT positive-int
negativeIntT negative-int
nonPositiveIntT non-positive-int
nonNegativeIntT non-negative-int
nonZeroIntT non-zero-int
intRangeT(-5, 6) int<-5, 6>
intRangeT(max: 6) int<min, 6>
intRangeT(min: -5) int<-5, max>
intMaskT(1, 2, 4) int-mask<1, 2, 4>
intMaskT(classConstantMaskT(Foo::class, 'INT_*') int-mask-of<Foo::INT_*>
floatT(12.5) 12.5
floatRangeT(-0.001, 2.344) float<-0.001, 2.344>

PHPDoc strings

Typhoon PHPDoc
nonEmptyStringT non-empty-string
truthyStringT, nonFalsyStringT truthy-string, non-falsy-string
numericStringT numeric-string
lowercaseString lowercase-string
stringT('abc') 'abc'
classT(Foo::class), classStringT(Foo::class), classT(objectT(Foo::class)) class-string<Foo>
stringT(Foo::class), classConstantT(Foo::class, 'class') Foo::class
literalStringT literal-string

PHPDoc constants

Typhoon PHPDoc
constantT('PHP_INT_MAX') PHP_INT_MAX
constantMaskT('JSON_*') JSON_*
classConstantT(Foo::class, 'BAR') Foo::BAR
classConstantMaskT(Foo::class, 'IS_*') Foo::IS_*

PHPDoc arrays and iterables

Typhoon PHPDoc
arrayT(value: objectT(Foo::class)) Foo[]
listT(stringT) list<string>
nonEmptyListT(stringT) non-empty-list<string>
listShapeT([intT, stringT]) list{int, string}
arrayShapeT([intT, optional(stringT)]) list{int, 1?: string}
unsealedListShapeT([intT]) list{int, ...}
unsealedListShapeT([intT], stringT) list{int, ...<string>}
arrayT(value: stringT) array<string>
arrayT(intT, stringT) array<int, string>
nonEmptyArrayT(arrayKeyT, stringT) non-empty-array<array-key, string>
arrayShapeT() array{}
arrayShapeT([intT, stringT]) array{int, string}
arrayShapeT([intT, 'a' => optional(stringT)]) array{int, a?: string}
unsealedArrayShapeT([intT]) array{int, ...}
unsealedArrayShapeT([floatT], intT, stringT) array{float, ...<int, string>}
keyOfT(classConstantT(Foo::class, 'ARRAY')) key-of<Foo::ARRAY>
valueOfT(classConstantT(Foo::class, 'ARRAY')) value-of<Foo::ARRAY>
offsetT($TArray->type, $TKey->type) TArray[TKey]
iterableT(objectT, stringT) iterable<object, string>
iterableT(value: stringT) iterable<string>

PHPDoc objects

Typhoon PHPDoc
objectT(Foo::class, [stringT, floatT]) Foo<string, float>
selfT([stringT, floatT]) self<string, float>
parentT([stringT, floatT]) parent<string, float>
staticT([stringT, floatT]) static<string, float>
objectShapeT(['prop' => stringT]) object{prop: string}
objectShapeT(['prop' => optional(stringT))]) object{prop?: string}

PHPDoc callables

Typhoon PHPDoc
callableT([stringT], voidT) callable(string): void
callableT([param(stringT, default: true)]) callable(string=): mixed
callableT([param(stringT, variadic: true)]) callable(string...): mixed
callableT([param(stringT, byRef: true)]) callable(string&): mixed
closureT([stringT], voidT) Closure(string): void
closureT([param(stringT, default: true)]) Closure(string=): mixed
closureT([param(stringT, variadic: true)]) Closure(string...): mixed
closureT([param(stringT, byRef: true)]) Closure(string&): mixed

Union aliases

Typhoon PHPDoc
array-key arrayKeyT
numericT numeric
scalarT scalar

统计信息

  • 总下载量: 47.02k
  • 月度下载量: 0
  • 日度下载量: 0
  • 收藏数: 64
  • 点击次数: 0
  • 依赖项目数: 8
  • 推荐数: 0

GitHub 信息

  • Stars: 64
  • Watchers: 5
  • Forks: 2
  • 开发语言: PHP

其他信息

  • 授权协议: MIT
  • 更新时间: 2023-09-13