1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/openharmony-arkcompiler_ets_frontend

 / Детали:

[Ошибка]: Ошибка в выводе типа обратного вызова

Предстоит сделать
Владелец
Создано  
25.05.2025

Что произошло?

В соответствии с текущей спецификацией, коллбэк, содержащий аргумент, может быть назначен только функции, чей аргумент является её объявленным родительским классом.
Пример_1:

class A_Base {}
class A_Middle extends A_Base {}
class A extends A_Middle{}
class B {}

function test(callback:(arg: A_Middle) => void) {}

test((a: A_Base):void => {})    // успех
test((a: A_Middle):void => {})  // успех
test((a: A):void => {})         // ошибка компиляции
test((a: B):void => {})         // ошибка компиляции

Все сообщения об ошибках компиляции:

TypeError: Тип '(a: A) => void' несовместим с типом '(arg: A_Middle) => void' в индексе 1 [p1_test.ets:44:6]
TypeError: Тип '(a: B) => void' несовместим с типом '(arg: A_Middle) => void' в индексе 1 [p1_test.ets:45:6]

Все вышеперечисленные случаи соответствуют спецификации и являются разумными.

Однако, когда функция test перегружена, она может компилироваться без ошибок, и результат оказывается неожиданным.
Пример_2:

class A_Base {}
class A_Middle extends A_Base {}
class A extends A_Middle{}
class B {}

function test() { console.log("no callback") }
function test(callback:(arg: A_Middle) => void) { console.log("have callback") }

test((a: A_Base):void => {})    // успех
test((a: A_Middle):void => {})  // успех
test((a: A):void => {})         // успех
test((a: B):void => {})         // успех

И вывод:

have callback
have callback
have callback
have callback

В любом случае, последние два случая должны выдавать ошибку компиляции, как в примере_1.

test((a: A_Base):void => {})    // успех
test((a: A_Middle):void => {})  // успех
test((a: A):void => {})         // ошибка компиляции
test((a: B):void => {})         // ошибка компиляции
```### Каковы ожидаемые действия?

Ошибки компиляции выдаются в соответствии с спецификацией.

### Как воспроизвести эту ошибку

 :star: 

### Дополнительная информация



### Информация о версии или ветке

- [x] master
- [ ] 5.1-Release
- [ ] 5.0-Release
- [ ] 5.0-Beta1
- [ ] Release 4.1
- [ ] Release 4.0
- [ ] Release 3.2

Комментарий (0)

GitLife Service Account Задача создана
GitLife Service Account добавлено
 
waiting_for_assign
label.
GitLife Service Account добавлено
 
bug
label.
Развернуть журнал операций

Вход Перед тем как оставить комментарий

Статус
Ответственный
Контрольная точка
Pull Requests
Связанные запросы на слияние могут быть закрыты после их объединения
Ветки
Дата начала   -   Крайний срок
-
Закрепить/Открепить
Приоритет
Участники(1)
1
https://api.gitlife.ru/oschina-mirror/openharmony-arkcompiler_ets_frontend.git
git@api.gitlife.ru:oschina-mirror/openharmony-arkcompiler_ets_frontend.git
oschina-mirror
openharmony-arkcompiler_ets_frontend
openharmony-arkcompiler_ets_frontend