{"record":{"id":"9c455d06bbde8e80","repo":"apple/pkl","slug":"values-of-type-typealias-cannot-be-rendered-as-p","errorCode":null,"errorMessage":"Values of type `TypeAlias` cannot be rendered as Properties. Value: %s","messagePattern":"Values of type `TypeAlias` cannot be rendered as Properties\\. Value: (.+?)","errorType":"exception","errorClass":"RendererException","httpStatus":null,"severity":"error","filePath":"pkl-core/src/main/java/org/pkl/core/PropertiesRenderer.java","lineNumber":178,"sourceCode":"    @Override\n    public String convertClass(PClass value) {\n      throw new RendererException(\n          String.format(\n              \"Values of type `Class` cannot be rendered as Properties. Value: %s\",\n              value.getSimpleName()));\n    }\n\n    @Override\n    public String convertTypeAlias(TypeAlias value) {\n      throw new RendererException(\n          String.format(\n              \"Values of type `TypeAlias` cannot be rendered as Properties. Value: %s\",\n              value.getSimpleName()));\n    }\n\n    @Override\n    public String convertRegex(Pattern value) {\n      throw new RendererException(\n          String.format(\n              \"Values of type `Regex` cannot be rendered as Properties. Value: %s\", value));\n    }\n\n    @Override\n    public String convertReference(Reference value) {\n      throw new RendererException(\n          String.format(\n              \"Values of type `Reference` cannot be rendered as Properties. Value: %s\", value));\n    }\n\n    private void doVisitMap(@Nullable String keyPrefix, Map<?, ?> map) {\n      for (Map.Entry<?, ?> entry : map.entrySet()) {\n        doVisitKeyAndValue(keyPrefix, entry.getKey(), entry.getValue());\n      }\n    }\n\n    private void doVisitKeyAndValue(@Nullable String keyPrefix, Object key, Object value) {","sourceCodeStart":160,"sourceCodeEnd":196,"githubUrl":"https://github.com/apple/pkl/blob/f3efcbfc9b60d30053b0536d664948d7aa1b8673/pkl-core/src/main/java/org/pkl/core/PropertiesRenderer.java#L160-L196","documentation":"The Properties (`.properties`) renderer cannot represent Pkl type-alias values, since the properties format only supports scalar string values. convertTypeAlias throws a RendererException naming the alias's simple name when one is encountered during traversal.","triggerScenarios":"Rendering output as `properties` when the value tree contains a value whose Pkl type is a type alias (e.g. `myUrl: Url` where `Url` is a `typealias String`... specifically values typed as TypeAlias), passed into PropertiesRenderer.","commonSituations":"Evaluating a config that uses custom type aliases for strings/URIs and then exporting to .properties files for Java tooling; migrating Java .properties templates to Pkl.","solutions":["Use the underlying (non-alias) primitive type for the value so it renders as a plain scalar","Convert the alias to its underlying value explicitly before rendering","Choose an output format that supports the value (json, pkl) instead of properties"],"exampleFix":"// before (Pkl)\ntypealias Endpoint = String\nendpoint: Endpoint = \"https://example.com\"\n// after (Pkl)\nendpoint: String = \"https://example.com\"","handlingStrategy":"validation","validationCode":"// Pkl-side: ensure values are plain scalars\n// if (value is TypeAlias) use value.underlyingValue (or the primitive) before rendering","typeGuard":null,"tryCatchPattern":"try {\n  renderer.render(value);\n} catch (RendererException e) {\n  // fall back to json/pkl output or stringify the value\n}","preventionTips":["Avoid type aliases on values that must be exported to .properties","Use primitive types in property-facing schemas","Prefer json or pkl output when aliases are required"],"tags":["properties","rendering","pkl","type-alias"],"backgroundTag":"unsupported-operation","analyzedSha":"f3efcbfc9b60d30053b0536d664948d7aa1b8673","analyzedAt":"2026-09-08T13:10:45.570Z","contentChangedAt":"2026-09-08T13:10:45.570Z","schemaVersion":2},"datasetVersion":"2026-09-14T16:17:12.679Z"}