<div class="chatlog__message-group">
  <div id="chatlog__message-container-754924344177590404" class="chatlog__message-container" data-message-id="754924344177590404">
    <div class="chatlog__message">
      <div class="chatlog__message-aside"><img class="chatlog__avatar" src="https://cdn.discordapp.com/avatars/391777793861615647/31a6a0dfa55f845d5f1c6c43c681d40d.png?size=512" alt="Avatar" loading="lazy"></div>
      <div class="chatlog__message-primary">
        <div class="chatlog__header"><span class="chatlog__author" title="takka." data-user-id="391777793861615647">takka</span> <a href="/channels/430242233468452865?category=main&amp;channel=swiftbot-sandbox&amp;message_id=754924344177590404"><span class="chatlog__timestamp" title="Monday, September 14, 2020 4:39 AM"></span></a><a href="#chatlog__message-container-754924344177590404">9/14/2020 4:39 AM</a></div>
        <div class="chatlog__content chatlog__markdown"><span class="chatlog__markdown-preserve"><span class="chatlog__markdown-mention" title="swift52#7242">@swift-5.2.5</span>
            <code class="chatlog__markdown-pre chatlog__markdown-pre--multiline language-swift">import Foundation @propertyWrapper struct DefaultValue&lt;Storage: DefaultValueStorage&gt;: Decodable { var wrappedValue: Storage.Value = Storage.value } extension DefaultValue { init(from decoder: Decoder) throws { let container = try decoder.singleValueContainer() self.wrappedValue = try container.decode(Storage.Value.self) } } protocol DefaultValueStorage { associatedtype Value: Decodable static var value: Value { get } } enum DefaultValueStorages { enum Nil&lt;T: Decodable&gt;: DefaultValueStorage { static var value: T? { nil } } } // MARK: - 1. 直接書く struct S1 { @DefaultValue&lt;DefaultValueStorages.Nil&lt;String&gt;&gt; var string } // MARK: - 2. 別enumでtypealiasする enum Default { typealias Nil&lt;T: Decodable&gt; = DefaultValue&lt;DefaultValueStorages.Nil&lt;T&gt;&gt; } struct S2 { @Default.Nil&lt;String&gt; var string } // MARK: - 3. extension DefaultValueでtypealiasする extension DefaultValue { typealias Nil&lt;T: Decodable&gt; = DefaultValue&lt;DefaultValueStorages.Nil&lt;T&gt;&gt; } struct S3 { @DefaultValue.Nil&lt;String&gt; var string }</code></span></div>
      </div>
    </div>
  </div>
</div>