**Description**
The `airflow.models.baseoperator.chain()` is a very useful and convenient way to add sequential task dependencies in DAGs but the function only supports tasks of a `BaseOperator` type.

**Use case / motivation**
Users who create tasks via the `@task` decorator will not be able to use the `chain()` function to apply sequential dependencies that do not share an `XComArg` implicit dependency.

**Are you willing to submit a PR?**
Absolutely. 🚀 

**Related Issues**
None

tests/models/test_baseoperator.py
"""Test render_template propagates Jinja invalid expression errors."""
        with DAG("test-dag", start_date=DEFAULT_DATE):
            task = DummyOperator(task_id="op1")
        with pytest.raises(jinja2.exceptions.TemplateSyntaxError):
            task.render_template("{{ invalid expression }}", {})
    @mock.patch("airflow.templates.SandboxedEnvironment", autospec=True)
    def test_jinja_env_creation(self, mock_jinja_env):
        """Verify if a Jinja environment is created only once when templating."""
        with DAG("test-dag", start_date=DEFAULT_DATE):
            task = MockOperator(task_id="op1", arg1="{{ foo }}", arg2="{{ bar }}")
        task.render_template_fields(context={"foo": "whatever", "bar": "whatever"})
        assert mock_jinja_env.call_count == 1
    @mock.patch("airflow.models.dag.NativeEnvironment", autospec=True)
    def test_jinja_env_creation_native_environment(self, mock_jinja_env):
        """Verify if a Jinja environment is created only once when templating."""
        with DAG("test-dag", start_date=DEFAULT_DATE, render_template_as_native_obj=True):
            task = MockOperator(task_id="op1", arg1="{{ foo }}", arg2="{{ bar }}")
        task.render_template_fields(context={"foo": "whatever", "bar": "whatever"})
        assert mock_jinja_env.call_count == 1
    def test_set_jinja_env_additional_option(self):
        """Test render_template given various input types."""
        with DAG(
            "test-dag", start_date=DEFAULT_DATE, jinja_environment_kwargs={'keep_trailing_newline': True}
        ):
            task = DummyOperator(task_id="op1")
        result = task.render_template("{{ foo }}\n\n", {"foo": "bar"})
        assert result == "bar\n\n"
    def test_override_jinja_env_option(self):